Пролог | доступ к элементу в списке

#prolog

#пролог

Вопрос:

У меня есть этот код в файле .pl, и я хочу выполнить поиск по списку с длиной = 1 и вернуть элемент внутри. Этот код выдает мне ошибку. Я не знаю, как это сделать точно. может кто-нибудь дать мне несколько советов? Я новичок в prolog.

В этом случае он должен возвращать ccc

 list([aaa, bbb, ccc, ddd]).
list([aaa, ccc, ddd]).
list([aaa, ccc]).
list([ccc]).

search_list(Element) :- list(A), length(A, Size), Size is 1.
  

Комментарии:

1. Я ничего не знаю о синтаксисе Prolog, но моя длина написана с ошибкой в вашем коде.

2. @Tyberius: было бы неплохо, если бы был бот, который искал lenght и другие распространенные опечатки lenght , поскольку это происходит часто, и время от времени, это даже причина, по которой он не работает :).

3. Да, извините, я уже исправил это

Ответ №1:

Вы делаете это с помощью унификации:

 search_list(Element) :-
    list([Element]).  % ← unification with a singleton list  

Таким образом, это приведет только к объединению Element с ccc , поскольку другие списки не являются одноэлементными списками.

Для списка с произвольным количеством элементов вы можете использовать предикат member/2 [swi-doc]:

 search_list(Element) :-
    list(List),
    member(Element, List).  % ← unify with elements of List