Prolog练习与列表

时间:2016-12-03 13:56:58

标签: list prolog definition backtracking

如果有人帮助我完成练习,我将不胜感激

如果我有prolog谓词**split_list(Limit,List,High,Low) (split_list/4)** 它有一个整数列表列表,一个整数限制,"返回"列出 列表列表的所有数据大于或等于限制和 列表低,哪些数据少于限制。例如: ?- split_list(2, [0, 2, 1, 3, 4], High, Low). High = [2, 3, 4] Low = [0, 1]

i)使用尽可能少地给出谓词的回溯定义 控件。

ii)使用与[i]相同的声明含义定义谓词 split_list_alt / 3 (非递归定义) //注释:使用谓词集合解决方案(非回溯)例如: ?- split_list(0, [0, 2, 1, 3, 4], High, Low). High = [0, 2, 1, 3, 4] Low = [] Yes

1 个答案:

答案 0 :(得分:0)

您可以使用以下谓词列表来实现此目的。

split_list(_,[],[],[]):-
    !.

split_list(N,[LH|LT],[LH|AT],B):-
    LH>=N,!,
    split_list(N,LT,AT,B).

split_list(N,[LH|LT],A,[LH|BT]):-
    split_list(N,LT,A,BT).