Syntax 序言;或;操作员,查询
我正在写一些我不熟悉的序言 我在找“或”接线员 这是我的问题。我想写的代码将: 如果Y等于值Z或值Q或值p,则返回XSyntax 序言;或;操作员,查询,syntax,prolog,operators,logic,Syntax,Prolog,Operators,Logic,我正在写一些我不熟悉的序言 我在找“或”接线员 这是我的问题。我想写的代码将: 如果Y等于值Z或值Q或值p,则返回X 如果Y等于所有3,我要求它返回X。这里的or运算符是什么?有吗 您可以通过以下方式在Y上“调用”替代绑定: ...registered(X, Y), (Y=ct101; Y=ct102; Y=ct103). 注意:括号是保持正确的执行控制流所必需的。/2它是通用的或运算符。对于你有限的用途,你最好选择更地道的 ...registered(X, Y), member(Y, [ct
如果Y等于所有3,我要求它返回X。这里的or运算符是什么?有吗 您可以通过以下方式在
Y
上“调用”替代绑定:
...registered(X, Y), (Y=ct101; Y=ct102; Y=ct103).
注意:括号是保持正确的执行控制流所必需的。代码>/2它是通用的或运算符。对于你有限的用途,你最好选择更地道的
...registered(X, Y), member(Y, [ct101,ct102,ct103]).
回溯时将Y绑定到列表中的每个成员
编辑我延迟理解了您的最后一个要求。如果希望Y匹配所有3个值,或不合适,请使用
...registered(X, ct101), registered(X, ct102), registered(X, ct103).
还是更紧凑
...findall(Y, registered(X, Y), L), sort(L, [ct101,ct102,ct103]).
findall/3按照注册/2成功的顺序构建列表。然后我使用sort来确保匹配
...setof(Y, registered(X, Y), [ct101,ct102,ct103]).
setof/3还将结果列表排序为另一个视点。也可以使用“disjunct”运算符或分号在序言中执行“or”:
registered(X, Y) :-
X = ct101; X = ct102; X = ct103.
要获得更全面的解释:
谢谢,这帮了大忙。我不知道该怎么做,但我将阅读绑定和回溯。谢谢!
registered(X, Y) :-
X = ct101; X = ct102; X = ct103.