Присвоение значений в предикате - PullRequest
1 голос
/ 30 мая 2019

Есть ли способ 2-кратного задания другого значения в переменной внутри предиката? Например, можем ли мы как-нибудь сделать

X is 10,
X is 3.

производить правда?

Ответы [ 2 ]

2 голосов
/ 30 мая 2019

Пожалуйста, не делай так.is/2 предназначен для оценки арифметических выражений.

Без какого-либо контекста сложно невозможно предположить, как правильно это сделать.Традиционный способ состоит в том, чтобы иметь предикат, который выглядит следующим образом:

ten_or_three(10).
ten_or_three(3).

Вы можете делать все виды Prolog-y с таким предикатом.

?- ten_or_three(10).
true.

?- ten_or_three(4).
false.

?- length(L, 3), maplist(ten_or_three, L), sumlist(L, Sum).
L = [10, 10, 10],
Sum = 30 ;
L = [10, 10, 3],
Sum = 23 ;
L = [10, 3, 10],
Sum = 23 ;
L = [10, 3, 3],
Sum = 16 ;
L = [3, 10, 10],
Sum = 23 ;
L = [3, 10, 3],
Sum = 16 ;
L = [3, 3, 10],
Sum = 16 ;
L = [3, 3, 3],
Sum = 9.
1 голос
/ 30 мая 2019

Например,

p(X) :- X is 3;X is 5.

верно для X = 3 или 5.

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