#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