2012-09-05 3 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. –

Смежные вопросы