9、利用属性变量将约束处理规则编译为Prolog

利用属性变量将约束处理规则编译为Prolog

1. 引言

在约束逻辑编程(CLP)的早期,约束求解是通过用低级语言编写的内置约束求解器“硬编码”实现的。这种“黑盒”方法虽然高效,但难以修改求解器或在新领域构建求解器,更不用说调试、推理和分析了。为了提高约束系统的灵活性和可定制性,人们提出了多种方法:
- CHIP中的恶魔、前向规则和条件语句,可在有限程度上定义约束的传播。
- cc(FD)中的约束组合器,可从简单约束构建更复杂的约束。
- BNR - Prolog中与布尔变量相连的约束和“嵌套约束”,可表达原始约束上的任何逻辑公式。
- clp(FD)中的索引词,可在中等抽象级别实现有限域上的约束。
- 元变量和属性变量,可在低抽象级别将约束附加到变量上。

除了最后一种方法,其他方法只能扩展特定约束域(通常是有限域)上的求解器,而属性变量提供了实现其他(特定于应用程序)约束域的表达能力。属性变量为与变量关联的属性提供直接访问存储位置,使合一操作可由用户定义。如今,属性变量是许多约束逻辑编程语言中实现暂停(延迟)机制和约束求解器扩展的主要低级构造。然而,用这种方式编写约束很繁琐,类似于“约束汇编”编程。

约束处理规则(CHR)是一种专门用于编写约束求解器的声明性语言扩展。使用CHR,可以将用户定义的约束引入高级宿主语言(如Prolog或Lisp)。CHR本质上是一种承诺选择语言,由受保护的规则组成,可将约束重写为更简单的约束,直到问题得到解决。CHR可以定义用户定义约束的简化和传播,是CHIP中各种用户定义约束构造的推广。

与通用并发逻辑编程语言、并发约束语言和ALPS框架不同,CHR是一种专门用于定义声明性对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值