В какую категорию мы можем поместить X / Y или X: Y в Пролог - PullRequest
0 голосов
/ 03 июня 2018

если я использую что-то подобное в Прологе

test(X/Y).

или

test(X:Y).

То есть X:Y и X/Y считаются переменной или строкой?

В какую категорию мы можем поместить это?

1 Ответ

0 голосов
/ 03 июня 2018

Оба X/Y и X:Y являются составными терминами .Попробуйте:

?- functor(X/Y, Functor, Arity).
Functor =  (/),
Arity = 2.

?- X/Y =.. [Functor| Arguments].
Functor =  (/),
Arguments = [X, Y].

?- functor(X:Y, Functor, Arity).
Functor =  (:),
Arity = 2.

?- X:Y =.. [Functor| Arguments].
Functor =  (:),
Arguments = [X, Y].

Оба / и : являются стандартными infix операторы:

?- current_op(Priority, Type, /).
Priority = 400,
Type = yfx.

?- current_op(Priority, Type, :).
Priority = 600,
Type = xfy.

Тип yfx означает, что оператор левый ассоциативный :

?- write_canonical(x/y/z).
/(/(x,y),z)
true.

В то время как тип xfy означает, что оператор правый ассоциативный :

?- write_canonical(x:y:z).
:(x,:(y,z))
true.
...