2014-04-19 88 views
3

我想有一个列表L包含三个元素A,B和C具有以下约束,约束规划

:- use_module(library(clpfd)). 
L[A,B,C], L ins 1..3, A#=B+C. 

但是,它给出了一个错误 - Syntax error: Operator expected.

+6

你可能指 'L = [A,B,C]'(即 “=” 已丢失)。 – hakank

回答

3

刚回答,以便将问题排除在未回答问题列表之外: 错误可能也是(: - )/ 2,不仅是缺少的(=)/ 2。所以下面 会议wurks:

Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 7.1.11) 
Copyright (c) 1990-2014 University of Amsterdam, VU Amsterdam 

?- use_module(library(clpfd)). 
% library(occurs) compiled into occurs 0.00 sec, 14 clauses 
% library(apply_macros) compiled into apply_macros 0.01 sec, 51 clauses 
% library(assoc) compiled into assoc 0.01 sec, 103 clauses 
% library(clpfd) compiled into clpfd 0.12 sec, 2,694 clauses 
true. 

?- L=[A,B,C], L ins 1..3, A#=B+C. 
L = [A, B, C], 
A in 2..3, 
B+C#=A, 
B in 1..2, 
C in 1..2. 

在上面我们只得到尽可能说明问题包括方程 和可变范围。枚举的解决方案之一具有使用 标签/ 2谓词,以及:

?- L=[A,B,C], L ins 1..3, A#=B+C, label(L). 
L = [2, 1, 1], 
A = 2, 
B = C, C = 1 
L = [3, 1, 2], 
A = 3, 
B = 1, 
C = 2 
L = [3, 2, 1], 
A = 3, 
B = 2, 
C = 1. 

再见