首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Picat中是否存在求值构造函数,或者它更像Prolog?

在Picat中是否存在求值构造函数,或者它更像Prolog?
EN

Stack Overflow用户
提问于 2016-11-10 03:08:27
回答 1查看 138关注 0票数 1

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

代码语言:javascript
复制
Picat 2.0b5, (C) picat-lang.org, 2013-2016.

Picat> X = $point(2,3).
X = point(2,3)
yes

但以下内容不起作用,即应该评估的组件。我期望结果是X= point(3,12),但它不会给出这个结果:

代码语言:javascript
复制
Picat> X = $point(1+2,3*4).
X = point(1 + 2,3 * 4)
yes

做到这一点的最短方法是什么?似乎Picat ($)/1运算符类似于lisp引号运算符,它阻止了Picat求值。剩下的就是Prolog统一了。以下是一些在Picat中实现Prolog统一的示例:

代码语言:javascript
复制
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中也找不到它们。

EN

回答 1

Stack Overflow用户

发布于 2017-06-29 13:53:59

试试这个:

代码语言:javascript
复制
Picat> X = new_struct(point, [1+2,3*4]). 
X = point(3,12)
yes

这是在Picat中创建结构的另一种方式。使用new_struct,您可以创建一个结构,第一个参数是要创建的结构的名称,第二个参数是一个整数(这将是结构的字段数)或一个列表。在后一种情况下,结构的字段将是列表的元素。

甚至我都不明白为什么在创建point之前不对表达式求值。如果我没记错的话,书中说用Picat进行约束求解是指在计算调用之前,参数是完全计算的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40514260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档