我正在为一个编程语言课程的一个学期末项目工作。作业如下。我正在用Java编写它,我在Prolog中编写时遇到了很多麻烦。我一直在使用Prolog遇到很多麻烦所以这个问题同样需要帮助完成任务,因为它试图更多地了解Prolog。我能得到的任何帮助都会非常感激
一个句子包含单词,全部 发生在字典中 没有白色的连接 空格作为分隔符。描述一个 产生所有可能的解决方案 答案,与给定的兼容 以下2中的字典 3种语言:Java,Haskell,Prolog。该 测试数据以UTF-8文本形式提供 每行包含一个句子的文件, 所有的话都出现在 字典,以UTF-8文本形式提供 每行一个单词的文件。该 输出应该是UTF-8文本文件 包含所有句子 由空格分隔的单词。
word文件示例:
猫
狗
树皮
运行
该
远句子文件的一个例子是
thedogbarks
thecatrunsaway
答案 0 :(得分:3)
程序的核心应该是一个谓词,用于标记字符代码列表,即从代码中构建原子列表(=单词)。以下是大纲:
%% 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.
或者在解析文件以获取输入并将结果输出到文件中的更复杂的地方使用它。