我是prolog和基于规则的语言的新手,所以如果我让你生气,抱歉:)。现在我想从用户那里得到2个数组(最后一个用于返回结果)。值并不重要所以我试图将规则定义为
run([_|_],[_|_],[_|_]):-...
这将没有用,因为我不知道哪个数组是哪个。下面是我的完整代码,我需要从用户那里获得2个不同或相同的列表,比较它们的值并将元素的位置保存到结果列表。我应该将所有可能的值定义为规则吗?我的意思是
run([X|Y],[X|Y], L3), run([X|X],(Z|T), L3)... and so on.
源码
add(X, L, [X|L]).
filledlist([(X, Y)|T]).
find(L, X).
find([], N) :- fail.
find([X|List], 1) :- nl.
find([X|List], N) :-
N1=N-1,
find(List, N1).
checkresult(0).
checkresult(X) :- ! , fail.
addtobox(B, O, L1, L2, L3) :-
checkresult(find(L1, B) - find(L2, O)),
assignit(B, O, L3).
nextElement(ACC, ACCN, L1, L2, L3) :-
ACC1 is ACC + 1,
addtobox(ACCN, ACC1, L1, L2, L3),
nextElement(ACC1, ACCN, L1, L2, L3).
start(ACC, L1, L2, L3) :-
ACC1 is ACC + 1,
nextElement(ACC, ACC1, L1, L2, L3),
start(ACC1, L1, L2, L3).
assignit(B, O, RES) :- add((B, O), RES, [(B, O)|RES]).
run(L1, L2, L3) :- start(1, L1, L2, L3).