在Prolog中指定列表长度作为目标

时间:2018-10-10 04:51:08

标签: prolog

我想使用内置谓词include / 3来获取长度大于N的列表列表中的所有列表。

我已经尝试过了:

% S is the size I'm checking for
include((length(_, N), N = S), List1, List2).

但是没有用。我不确定如何正确指定我的身高目标。我尤其不确定用什么代替“ _”。

1 个答案:

答案 0 :(得分:3)

更简单的方法:为谓词提供适当的参数(例如,一个 schema 适配器):

length_list(Len,List) :- length(List,Len).

然后

...,
include(length_list(S), List1, List2).

根据您使用的系统,yalllambda库都是不错的选择,值得研究。

使用yall:

?- L1=[[a],[a,b]],S=2,include({S}/[L]>>length(L,S),L1,R).
L1 = [[a], [a, b]],
S = 2,
R = [[a, b]].