Почему это не объединяет? пролог - PullRequest
0 голосов
/ 09 января 2019

Здесь у нас есть два предиката len -> вернуть длину списка. processRel -> вызывает len.

len([],0).
len([_|T], R):-
        len(T,X),
        R is X+1.


processRel([H|Q],X):-
        len(H,X).

почему это не объединяет? это возвращает это:

? - processRel ([1,2,3,4], X).

ложь.

Вместо (мои ожидания): Х = 4.

Предикаты "len" работают, я уже проверял это, но я не понимаю, почему, если поместить это предикаты в другое, это работает так. спасибо!

1 Ответ

0 голосов
/ 09 января 2019

Вы должны сделать это

processRel(L,X):-
    len(L,X).

Прямо сейчас, это

processRel([H|Q],X):-
    len(H,X).

Вставка [1,2,3,4] означает, что мы получаем

processRel([1,2,3,4],X):-
     len(1,X).

Так что он объединяется с len(1,X). Который не определен, потому что 1 не является списком.

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