首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >swi-prolog中的Prolog类型定义

swi-prolog中的Prolog类型定义
EN

Stack Overflow用户
提问于 2010-10-18 04:57:10
回答 3查看 3K关注 0票数 5

在visual prolog中,prolog程序中有“域”部分,您可以在其中定义类型。swi-prolog中有没有类似的东西?

在visual prolog中,类型定义如下:

代码语言:javascript
复制
domains
NewType = thing1; thing2
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-10-22 07:30:17

不是的。但是在Mercury中有模式声明。Mercury不仅仅是Prolog,它还是一种functional-logic语言。Mercury仍然有很多Prolog语法。

SWI-Prolog是一个标准的Prolog。它只使用documentation1中的模式声明作为用户信息。这样的声明可以放在模块的注释中,以便文档解析程序进行编译。

在标准的Prolog中,除了注释之外,只有在非常特殊的情况下才允许(和需要)这样的声明。例如,Sicstus Prolog的block/1谓词需要它们。

Block/1用于共同路由(惰性评估、延迟等)。我一生中只在一个程序中使用过block,即PAKCS2,它是另一种函数逻辑语言的解释器。当解释器被移植到SWI时,没有使用block/1

SWI源文档中的1类型和模式声明

2 PAKCS,一个使用block/1谓词的程序(PAKCS是curry语言的实现)。

票数 7
EN

Stack Overflow用户

发布于 2010-12-07 17:27:37

虽然SWI-Prolog并不像你所要求的那样支持类型,但值得注意的是,它确实支持一种简单的“类型”机制,通过使用record库中的record/1谓词来使用术语规范。

此谓词允许您使用特定的术语规范语言指定相当复杂的术语“type”(模式),并将其解释为自动生成谓词,用于执行创建(通过构造函数谓词)、通过“setter”谓词执行修改以及通过“getter”谓词在术语实例上执行访问器,所有这些都是通过使用特定谓词命名约定的术语扩展来实现的。

这在编写传递相当复杂的术语结构的Prolog代码时特别有用,因为它为您提供了基本的类型检查功能,这是Prolog通常(本机)所缺乏的。我在许多大型Prolog项目中都使用过这种方法,在这些项目中,接口是在实现之前设计的。

票数 7
EN

Stack Overflow用户

发布于 2012-06-06 15:45:58

我记得读过关于Swi & Yap prolog的类型。这是一个带有"Hindley-Milner Prolog类型检查器“的网站:

Types for Prolog - Mercury-style type declarations and predicate signatures

Prolog Type Checker library

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

https://stackoverflow.com/questions/3955263

复制
相关文章

相似问题

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