swi-prolog中的Prolog类型定义

who*_*hoi 5 types definition prolog visual-prolog

在visual prolog中,prolog程序中有"domains"部分,您可以在其中定义类型.swi-prolog中有类似的东西吗?

在视觉序言中,类型定义如下:

domains
NewType = thing1; thing2
Run Code Online (Sandbox Code Playgroud)

sha*_*rky 7

虽然SWI-Prolog不像你要求的那样支持容量类型,但值得注意的是,它确实支持一个简单的"类型"机制,通过使用术语规范通过记录/ 1谓词record图书馆.

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

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


fra*_*ser 6

不,但水星有模式声明.水星不仅仅是Prolog; 它是一种功能逻辑语言.Mercury仍然有很多Prolog语法.

SWI-Prolog是标准的Prolog.它仅使用文档1中的模式声明作为用户的信息.这些声明可以放在模块的注释中,以便编译文档解析程序.

在标准Prolog中,在评论之外,这种声明仅在非常特殊的情况下被允许(和要求).例如,Sicstus Prolog 的/1谓词需要它们.

块/ 1用于共路由(延迟评估,延迟等).我只看到block过我生活中的一个程序,PAKCS 2,另一个功能逻辑语言的解释器.当口译员移植到SWI时,block/1没有使用.

1 SWI源文档中的类型和模式声明
2 PAKCS,一个使用block/1谓词的程序(PAKCS是咖喱语言的一种实现.)