Prolog 将不带空格/分隔符的句子拆分为带空格的句子

Prolog 将不带空格/分隔符的句子拆分为带空格的句子,prolog,tokenize,Prolog,Tokenize,我正在为一门编程语言课程做期末专题。作业如下所示。我已经用Java写完了,用Prolog写起来有很多困难。我在使用Prolog时遇到了很多麻烦,所以这个问题在寻求任务方面的帮助的同时,也在试图更多地理解Prolog。如果我能得到任何帮助,我将不胜感激 一个句子包含单词,全部 发生在字典里,那就发生了 不带白色连接 空间作为分隔符。描述 产生所有可能结果的解决方案 答案,与给定的 在下面的两个字典中 3种语言:Java、Haskell、Prolog。这个 测试数据以UTF-8文本形式提供 每行包含

我正在为一门编程语言课程做期末专题。作业如下所示。我已经用Java写完了,用Prolog写起来有很多困难。我在使用Prolog时遇到了很多麻烦,所以这个问题在寻求任务方面的帮助的同时,也在试图更多地理解Prolog。如果我能得到任何帮助,我将不胜感激

一个句子包含单词,全部 发生在字典里,那就发生了 不带白色连接 空间作为分隔符。描述 产生所有可能结果的解决方案 答案,与给定的 在下面的两个字典中 3种语言:Java、Haskell、Prolog。这个 测试数据以UTF-8文本形式提供 每行包含一句话的文件, 所有单词都出现在 字典,作为UTF-8文本提供 每行一个单词的文件。这个 输出应为UTF-8文本文件 包含所有的句子 用空格分隔的单词

word文件示例:



树皮
运行

远离

句子文件的一个例子是

狗吠声
卡通斯韦


程序的核心应该是标记字符代码列表的谓词,即从代码中构建原子(=单词)列表。以下是一个概要:

%% 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中给出一个动态规划解决方案;)