Пролог - Использование динамических с утверждениями
Я новичок в Прологе, и мне трудно использовать динамический предикат.
Во-первых, вот код, который я выполняю
:- dynamic(list/1).
add(X, LL) :- asserta(list([])), asserta(list(X)), retract(list(LL)).
Я знаю, что код выглядит странно, но я просто ищу правильный синтаксис для использования.
Теперь, если я сделаю:
добавить (2, LL).
Ответ будет:
LL = 2;
LL = [].
Но я хочу добавить X (2) в массив ([]). Так..
LL = [2].
Это выглядит просто (вероятно, так), но я не могу заставить его работать.
Большое спасибо.
1 ответ
Решение
Если вы хотите добавить X
в начало списка:
add(X, LL) :-
( retract(list(Prev))
-> LL = [X|Prev]
; LL = [X]
),
asserta(list(LL)).
Но я согласен с советом @jschimpf. Assert/retract следует использовать только при определенных обстоятельствах, которые могут быть весьма эффективными в некоторых приложениях.