还有另外一个问题: 有一个单词列表。如果单词的长度超过给定长度(例如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)
如何更改代码?任何帮助请!感谢。
答案 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)).