使用列表的序言练习
Prolog exercise with Lists
如果有人帮我做下面的练习,我将不胜感激
如果我有序言谓词**split_list(Limit,List,High,Low) (split_list/4)**
其中有一个整数列表List,和一个整数Limit,"returns"列表
High list List所有大于等于Limit的数据和
数据小于 Limit 的列表 Low。例如:
?- split_list(2, [0, 2, 1, 3, 4], High, Low).
High = [2, 3, 4]
Low = [0, 1]
i) 给出谓词的回溯定义 with less possible
控件。
ii)定义一个谓词split_list_alt/3,声明意义与[i)]相同(非递归定义)
//注解:使用谓词集合解决方案(非回溯)例如:
?- split_list(0, [0, 2, 1, 3, 4], High, Low).
High = [0, 2, 1, 3, 4]
Low = []
Yes
您可以使用以下谓词列表来实现此目的。
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).
如果有人帮我做下面的练习,我将不胜感激
如果我有序言谓词**split_list(Limit,List,High,Low) (split_list/4)**
其中有一个整数列表List,和一个整数Limit,"returns"列表
High list List所有大于等于Limit的数据和
数据小于 Limit 的列表 Low。例如:
?- split_list(2, [0, 2, 1, 3, 4], High, Low).
High = [2, 3, 4]
Low = [0, 1]
i) 给出谓词的回溯定义 with less possible 控件。
ii)定义一个谓词split_list_alt/3,声明意义与[i)]相同(非递归定义)
//注解:使用谓词集合解决方案(非回溯)例如:
?- split_list(0, [0, 2, 1, 3, 4], High, Low).
High = [0, 2, 1, 3, 4]
Low = []
Yes
您可以使用以下谓词列表来实现此目的。
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).