我想在 Picat 中快速创建一个结构。但是在创建结构时应该评估结构的组件。到目前为止,我尝试过,当组件已经是常量时,它给了我一个结构:
Picat 2.0b5, (C) picat-lang.org, 2013-2016.
Picat> X = $point(2,3).
X = point(2,3)
yes
但以下不起作用,即应该评估的组件。我期待结果是 X = point(3,12),但它没有给出这个结果:
Picat> X = $point(1+2,3*4).
X = point(1 + 2,3 * 4)
yes
最短的方法是什么?似乎 Picat ($)/1 运算符类似于 lisp 引号运算符,它阻止了 Picat 评估。剩下的就是 Prolog 统一。以下是 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 中也找不到。