Prolog-定义基本运算符

问题描述 投票:0回答:1

我对序言还很陌生,我想尝试创建一个行为如下的序言函数

calculate(add(1,sub(4,1)),Result)。结果= 4。

这是在做:1 +(4-1)= 4

我熟悉谓词,但是就能够编写一个add // 2谓词/运算符而言,我不知道从哪里开始。

非常感谢任何帮助或建议。

prolog swi-prolog
1个回答
0
投票

您仍在考虑功能

z = f(x,y)“ f(x,y)返回(替换为/减少为)值z ...”

谓词相关值为其他值:

p_f(x,y,z)“谓词p_建立关系/连接/链接值(x,y,z)使得z = f(x,y)”

所以要进行管道评估(数学符号(g°f)(x,y)

g(f(x,y))

您必须编写(此处不遵循“变量”以大写形式书写的Prolog约定:]

p_f(x,y,a),p_g(a,b)

并考虑通过p_f(x,y,_)流入该表达式,通过p_g/2传递到p_f(_,_,a), p_g(a,_)并通过p_g(a,b)流出该表达式的信息。

如果他们无法关联其论点,则

p_f / 3p_g / 2失败(返回false,不是在他们的任何论点中,而是整体上)将不会有结果。

使用谓词的优势在于,对于p_f(x,y),如果y已知,可以请求x;如果x已知,则可以请求y,或成对的有效(x,y)(只要在计算上可行并且谓词已正确编码)。或谓词add/3

  • add(2,3,X)-> X = 5
  • add(2,3,5)-> true
  • add(X,3,5)-> X = 2
  • add(1,3,5)->假
  • add(X,Y,5)-> X = 2,Y = 3; X = 3,Y = 2; ...无限广告
  • add(X,Y,Z)->与以上相同,只是更加不受限制

另请参见:Prolog ~ Splitting a number into a list

© www.soinside.com 2019 - 2024. All rights reserved.