2013-03-21 2 views
0

мне нужно сделать следующее: у меня есть события
Неправильное письмо в списке - Пролог

word([p,r,o,l,o,g]). 
word([p,r,o,l,o,g]). 

мне нужно найти письмо, которое является неправильным:

e.x wrong_letter([p,r,o,l,o,u,g],X).<br> 
X=u 

Тэя моя программа но не работает:

wrong_letter([X|Y],L) :- 
word(H), 
member(X,H), 
wrong_letter(Y,L). 

благодарит заранее, Извините за мой плохой английский.

ответ

1

Если у вас есть только одно неверное письмо (добавленное письмо) в вашем входном слове вы можете:

  • Возьмите слово
  • Split на две подсписков (голова и хвост), используя append/3
  • Проверьте, совпадает ли ваше входное слово с заголовком, добавленным письмом и хвостом; снова используя append/3

Это будет выглядеть:

wrong_letter(WrongWord, Letter):- 
    word(Word), 
    append(Head, Tail, Word), 
    append(Head, [Letter|Tail], WrongWord). 

Тест:

?- wrong_letter([p,r,o,l,o,u,g], X). 
X = u ; 

Вы также можете достичь того же эффекта с помощью select/3:

wrong_letter(WrongWord, Letter):- 
    word(Word), 
    select(Letter, WrongWord, Word). 
Смежные вопросы