Picat中是否存在求值构造函数,还是更像Prolog?

Picat中是否存在求值构造函数,还是更像Prolog?,prolog,picat,Prolog,Picat,我想在Picat中快速创建一个结构。但在创建结构时,应评估结构的组件。到目前为止,我已经尝试过了,当组件已经是常量时,它为我提供了一个结构: Picat 2.0b5, (C) picat-lang.org, 2013-2016. Picat> X = $point(2,3). X = point(2,3) yes 但以下内容不起作用,即应评估的组件。我期望的结果是X=点(3,12),但它没有给出这个结果: Picat> X = $point(1+2,3*4). X = point

我想在Picat中快速创建一个结构。但在创建结构时,应评估结构的组件。到目前为止,我已经尝试过了,当组件已经是常量时,它为我提供了一个结构:

Picat 2.0b5, (C) picat-lang.org, 2013-2016.

Picat> X = $point(2,3).
X = point(2,3)
yes
但以下内容不起作用,即应评估的组件。我期望的结果是X=点(3,12),但它没有给出这个结果:

Picat> X = $point(1+2,3*4).
X = point(1 + 2,3 * 4)
yes
最短的方法是什么?Picat($)/1运算符似乎类似于lisp quote运算符,它阻止了Picat求值。剩下的是序言的统一。以下是Picat中Prolog统一的一些示例:

Picat> $point(X,Y) = $point(1+2,3*4).
X = 1 + 2
Y = 3 * 4
yes

Picat> $point(X+Y,Z) = $point(1+2,3*4).
X = 1
Y = 2
Z = 3 * 4
yes

Picat> $X = $point(1+2,3*4).           
X = point(1 + 2,3 * 4)
yes
与Prolog中一样,表达式(如1+2和3*4)不会在($)/1中计算。也许在Picat中不可能有求值构造函数,类似地,目前在标准Prolog中找不到它们。

尝试以下方法:

Picat> X = new_struct(point, [1+2,3*4]). 
X = point(3,12)
yes
这是在Picat中创建结构的另一种方法。使用
new_struct
可以创建一个结构,作为第一个参数传递要创建的结构的名称,作为第二个参数传递整数(即结构的字段数)或列表。在后一种情况下,结构的字段将是列表的元素

甚至我也不明白为什么在创建
点之前不计算表达式。如果我在书中没有记错的话,那么使用Picat解决约束就是说,在计算调用之前,参数是完全被计算的