Sicstus Prolog - 将单词放入列表中

时间:2011-09-21 11:11:33

标签: list prolog word

还有另外一个问题: 有一个单词列表。如果单词的长度超过给定长度(例如4),它将被放入另一个列表中。

我试过了:

require_min_length([], _, []).
require_min_length([Word|Words], Minl, [List]):-
     word_length(Word, W),    % method word_length return the length of a word. 
     (W >= Minl -> append(Word, List, List), require_min_length(Words, Minl, List);    
     require_min_length(Words, Minl, List)).

我得到的结果:

| ?- Words=["ABCD", "ABCDE", "AAA"], require_min_weight(Words, 5, Lists).    
! Resource error: insufficient memory.

正确的结果将是:

Lists = [[65, 66, 67, 68, 69]].   (% ascii)

如何更改代码?任何帮助请!感谢。

1 个答案:

答案 0 :(得分:1)

你的谓词的问题在于你使用了附加错误。

您正在使用追加(Word,List,List),只有在Word为空列表时才会成功。另外,你真的不想将你的单词的代码附加到输出列表,而是单词本身。

考虑这样的事情:

require_min_length([], _, []).
require_min_length([Word|Words], Minl, NList):-
     word_length(Word, W),    % method word_length return the length of a word. 
     (W >= Minl -> NList=[Word|List] ; NList=List),
     require_min_length(Words, Minl, List)).