Будет ли это работать предикат?это пришло в моей викторине, чтобы найти положение элемента X в структуре данных под названием список - PullRequest
1 голос
/ 21 марта 2012

пример: Позиция (1, список (1, лист (2, ноль)), Z).
Z = 1. Позиция (3, список (1, лист (2, лист (3, ноль)), Z). Z = 3. где Z - позиция элемента X в структуре данных списка в вышеуказанном формате

Вот мое решение:

      position(X,list(nil),0).                %empty list
      position(X,list(X,T),1).                %list with X as head or first element 
      position(X,list(H,T),Z):-
                             position(X,list(T,nil),Z1), %X is in tail of list (H,T)
                             Z is Z1 + 1.

1 Ответ

2 голосов
/ 21 марта 2012

Нет, это не сработает.Правильный предикат:

position(X,list(nil),0).                %empty list
position(X,list(X,T),1).                %list with X as head or first element
position(X,list(H,T),Z):-
                position(X, T, Z1), %X is in tail of list (H,T)
                Z is Z1 + 1.

Запись position(X,list(T,nil),Z1), %X is in tail of list (H,T) приведет к циклу, и это логическая ошибка, поскольку нет причины вызывать position с list(T, nil).T уже является списком или атомом nil.

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