mmg*_*o27 5 constraints prolog clpfd
这是我的SWI-Prolog计划的概述:
:- use_module(library(clpfd)).
consec1(L) :-
L=[L1,L2,L3,L4,L5,L6,L7,L8,L9],
L ins 1..9,
...,
abs(L5-L4)#=1,
all_different(L),
labeling([],L)
Run Code Online (Sandbox Code Playgroud)
abs(L5-L4)#=1
让L5
和L4
彼此相邻.如果我想让三个数字彼此相邻,例如L3
,L4
并且L5
,我怎么能使用具体约束来做到这一点?
例如L3=4
,L5=5
,L4=6
或L4=7
,L5=8
,L3=9
这在您在评论中给出的意义上实现了连续。对于值列表N
,我们需要足够的空间来使所有值都位于其间,并且所有值都必须不同。
consecutive([]). % debatable case
consecutive(Xs) :-
Xs = [_|_],
length(Xs, N),
all_different(Xs),
max_of(Max, Xs),
min_of(Min, Xs),
Max-Min #= N-1.
max_of(Max, [Max]).
max_of(Max0, [E|Es]) :-
Max0 #= max(E,Max1),
max_of(Max1, Es).
min_of(Min, [Min]).
min_of(Min0, [E|Es]) :-
Min0 #= min(E, Min1),
min_of(Min1, Es).
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
99 次 |
最近记录: |