我是Answer Set Programming的新手,并尝试将问题编码到ASP中。我认为这是一个简单的问题。这是代码;
events(1..3).
sequence(A,B,C) :- events(A;B;C), A!=B, A!=C, B!=C.
如您所见,有一个由事件组成的序列。在这种情况下,它的长度为3.但是我希望它由用户决定。例如;
gringo asp.lp --const n = 3 |扣
代码应该是这样的;
events(1..3).
sequence(A,B,C) :- events(A;B;C), A!=B, A!=C, B!=C.
gringo asp.lp --const n = 4 |扣
代码应该是这样的;
events(1..4).
sequence(A,B,C,D) :- events(A;B;C;D), A!=B, A!=C, A!=D, B!=C, B!=D, C!=D.
我怎么能这样做? 谢谢,
答案 0 :(得分:0)
实际上,使用一些漂亮的递归,你可以获得每种可能排列的lisp风格列表。
这是我的程序:
top(n).
num(1..T) :- top(T).
partial_pattern(nil, 0).
unused(N,nil) :- num(N).
partial_pattern(cons(N,P),K+1) :- num(N), partial_pattern(P,K), unused(N,P).
unused(M,cons(N,P)) :- partial_pattern(cons(N,P),_), N!=M,unused(M,P).
pattern(P) :- partial_pattern(P,T), top(T).
#show pattern/1.