【发布时间】:2010-12-03 10:10:57
【问题描述】:
警告,我是 Prolog 的新手。
我在 Prolog 中编写了一个拆分谓词。它将一个列表拆分为两个新列表。一个包含大于 Key 的项目,一个包含小于或等于 Key 的项目。它应该只返回一组答案。问题是如果我输入 ;要检查更多答案,它会不断给我已经得到的答案,然后最终听众崩溃。我想知道你能不能帮我解决这个问题?
代码:
split([],_,[],[]).
split([H|T],Key,Small,Big):-
H=<Key,
removeFirst(Small,H,NewSmall),
split(T,Key,NewSmall,Big).
split([H|T],Key,Small,Big):-
H>Key,
removeFirst(Big,H,NewBig),
split(T,Key,Small,NewBig).
removeFirst([H|T],H,T).
removeFirst(L,Key,Result):-
divide(L,Key,F,E),
X = F,
Y = E,
append(X,Y,Z),
Result = Z.
输出:
?- split([1,2,3,4,5],3,S,B).
S = [1, 2, 3]B = [4, 5] ;
S = [1, 2, 3]B = [4, 5] ;
S = [1, 2, 3]B = [4, 5] ;
侦听器在第 4 次尝试时崩溃。
【问题讨论】:
标签: prolog