过滤单词列表

时间:2012-09-05 20:17:54

标签: list prolog filtering

目标:

过滤掉不以指定字符开头的列表中的所有单词。以指定字符开头的单词应存储在没有第一个字符的新列表中。

问题:

如果允许列表中的所有单词,则按预期工作。当不允许列表中的单词时,检查失败(按预期)但它退出谓词而不尝试继续列表中的下一个单词(不是预期的),如回溯并尝试重做下一个单词。 / p>

filter_word([Char|Rest], Char, Rest).

filter([], _, []).
filter([Word|Words], Char, [H|T]) :-
    filter_word(Word, Char, H),
    filter(Words, Char, T).

这是一项家庭作业。

1 个答案:

答案 0 :(得分:0)

  

它退出谓词而不尝试继续列表中的下一个单词(不是预期的),如回溯并尝试重做下一个单词。

那是因为filter中没有条款来处理单词与过滤器不匹配的情况。这个问题有三种情况:

  1. 清空清单。
  2. 非空,列表的第一个元素匹配过滤器。
  3. 非空,列表的第一个元素与过滤器不匹配。
  4. 你应该写相应的三个条款。