2012-09-05 56 views
-1

目标:过滤单词列表

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

问题:

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

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

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

这是一项家庭作业。

回答

0

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

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

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

您应该相应地写出三个条款。

+0

非常好的解释,它有点“弹出”我知道。它现在很好用。我不知道我是否应该在我的文章的解决方案中进行编辑,因为这是一项家庭任务。 – dudzor

+0

如果您希望我们检查一下,您可能也会如此,如果没有的话,您的电脑就可以正常使用! :] – m09

+0

@dudzor:请不要在SO上发布完整的作业分配解决方案。 –