Prolog 将不带空格/分隔符的句子拆分为带空格的句子
我正在为一门编程语言课程做期末专题。作业如下所示。我已经用Java写完了,用Prolog写起来有很多困难。我在使用Prolog时遇到了很多麻烦,所以这个问题在寻求任务方面的帮助的同时,也在试图更多地理解Prolog。如果我能得到任何帮助,我将不胜感激 一个句子包含单词,全部 发生在字典里,那就发生了 不带白色连接 空间作为分隔符。描述 产生所有可能结果的解决方案 答案,与给定的 在下面的两个字典中 3种语言:Java、Haskell、Prolog。这个 测试数据以UTF-8文本形式提供 每行包含一句话的文件, 所有单词都出现在 字典,作为UTF-8文本提供 每行一个单词的文件。这个 输出应为UTF-8文本文件 包含所有的句子 用空格分隔的单词 word文件示例: 猫Prolog 将不带空格/分隔符的句子拆分为带空格的句子,prolog,tokenize,Prolog,Tokenize,我正在为一门编程语言课程做期末专题。作业如下所示。我已经用Java写完了,用Prolog写起来有很多困难。我在使用Prolog时遇到了很多麻烦,所以这个问题在寻求任务方面的帮助的同时,也在试图更多地理解Prolog。如果我能得到任何帮助,我将不胜感激 一个句子包含单词,全部 发生在字典里,那就发生了 不带白色连接 空间作为分隔符。描述 产生所有可能结果的解决方案 答案,与给定的 在下面的两个字典中 3种语言:Java、Haskell、Prolog。这个 测试数据以UTF-8文本形式提供 每行包含
狗
树皮
运行
远离 句子文件的一个例子是 狗吠声
卡通斯韦
程序的核心应该是标记字符代码列表的谓词,即从代码中构建原子(=单词)列表。以下是一个概要:
%% tokenize(+Codes:list, -Atoms:list)
%
% Converts a list of character codes
% into a list of atoms. There can be several solutions.
tokenize([], []) :- !.
tokenize(Cs, [A | As]) :-
% Use append/3 to extract the Prefix of the code list
append(...),
% Check if the prefix constitutes a word in the dictionary,
% and convert it into an atom.
is_word(Prefix, A),
% Parse the remaining codes
tokenize(...).
您现在可以定义:
is_word(Codes, Atom) :-
atom_codes(Atom, Codes),
word(Atom).
word(the).
word(there).
word(review).
word(view).
split_words(Sentence, Words) :-
atom_codes(Sentence, Codes),
tokenize(Codes, Words).
然后像这样使用它:
?- split_words('thereview', Ws).
Ws = [the, review] ;
Ws = [there, view] ;
false.
或者在更复杂的情况下使用它,解析文件以获取输入并将结果输出到文件中。您能问一个具体的问题吗?到目前为止你试过什么?我甚至不知道从哪里开始,老实说,当单词是其他单词的前缀时,即“the”和“there”都有单词时,会发生什么行为?当它在文件中写入带有空格的句子时,它需要显示所有可能性+1。如果OP想要额外的积分,他们应该在Prolog中给出一个动态规划解决方案;)