为何使用约束的PROLOG代码报‘Operator expected’语法错误?
解决Prolog约束代码的语法错误问题
错误原因
出现该语法错误,核心是两个问题:
- 未加载CLP(FD)有限域约束库,
in/ins这类约束操作符属于该库,默认不会自动启用。 - 对列表内变量批量约束时,需使用
ins而非in——in是针对单个变量的约束操作符,列表批量约束要用到ins。
修正后的代码
:- use_module(library(clpfd)). % 加载CLP(FD)约束库 col_tri(Vars):- Vars = [X1,X2,X3], Vars ins 1..3, % 用ins约束列表中所有变量的取值范围 X1 #\= X2, X1 #\= X3, X2 #\= X3, label(Vars).
补充说明
- 不同Prolog实现的CLP(FD)库加载方式略有差异,比如SWI-Prolog用上述
use_module命令即可,若使用GNU Prolog等其他环境,可查阅对应文档确认库的加载指令。 label(Vars)用于枚举所有满足约束的变量取值组合,执行col_tri(Vars).会输出1-3的所有排列结果。
内容的提问来源于stack exchange,提问作者AMINE DZ
相关产品推荐
相关产品推荐

