2016-12-03 42 views
-3

我将不胜感激,如果有人帮我下锻炼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]

我)给谓词的回溯定义不太可能 控制。

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

+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).