-1

目标:

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

问题:

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

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

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

这是一个家庭作业。

4

1 回答 1

0

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

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

  1. 空列表。
  2. 非空,列表的第一个元素匹配过滤器。
  3. 非空,列表的第一个元素与过滤器不匹配。

你应该相应地写三个子句。

于 2012-09-05T20:23:25.740 回答