пролог термин без функтора - PullRequest
0 голосов
/ 18 октября 2011

Я сталкиваюсь с проблемой пролога относительно Списка и Срока. Тогда мой вопрос, как написать предикат

transform([a,b],X)

вернет X = (a, b) или наоборот

Это странно со мной, потому что я никогда раньше не сталкивался с таким термином. Я пробовал со встроенным = .. но

=..((a,b,c,d),X)

возвращает X = [',', a, (b, c, d)], что меня глубоко разочаровывает. Спасибо.

1 Ответ

2 голосов
/ 18 октября 2011

Отметьте что-то вроде этого:

transform([A], A):-
  A=..[_].
transform([A,B], (A,B)):-
  B=..[_].
transform([A,B,C|Tail], L):-
  L=..[',',A,T],
  transform([B,C|Tail], T).

Первое предложение необходимо, только если вы хотите преобразовать ([Item], Item).

?- transform([a,b], X).
X = (a, b) 

?- transform([a,b,c,d,e,f], X).
X = (a, b, c, d, e, f) 

?- transform(L, (a,b,c,d,e,f,g))
L = [a, b, c, d, e, f, g] 

Обратите внимание, что термин выУ здания действительно есть функтор, это ',' / 2, и он показан с круглыми скобками, которые вы видите.

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