Предикат isDuped в Прологе - PullRequest
       0

Предикат isDuped в Прологе

0 голосов
/ 24 ноября 2018

Я пытаюсь создать предикат в прологе с именем isDuped( Y ), который завершается успешно, только если Y является списком четной длины и каждый элемент в списке появляется два раза подряд (т. Е. [1,1,2,2,3,3,4,4]).В настоящее время у меня есть:

isDuped( Y ) :-
    Y == [].
isDuped( Y ) :-
    [ A, B | C ] = Y,
    A == B,
    isDuped( C ).

Однако один из модульных тестов моего профессора должен вернуть значение true, но, как я его написал, он возвращает false.isDuped([1,_]) должен возвращать true, но я понятия не имею, что мне нужно изменить.Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

Почему бы не

isDuped( [] ).
isDuped([A, A | C] ) :-
    isDuped( C ).
0 голосов
/ 24 ноября 2018

В вашем коде сравнение A == B проверяет, совпадают ли термины A и B.Неопределенная переменная и число не являются идентичными терминами.

То, что ваш профессор, кажется, хочет (не ясно из формулировки проблемы, которую вы дали, но ясно из теста), является объединением =: просто измените A == Bдо A = B.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...