我想知道是否有可能在prolog中执行以下操作
L = [1,2,3,4,5,_,_,7].
我想做类似
的事情getElements(L, R)
返回 R = [1,2,3,4,5,7]
并忽略列表中的通配符
答案 0 :(得分:1)
如果你的Prolog有library(apply),你可以写
getElements(L, R) :-
include(nonvar, L, R).
或者,更紧凑
getElements(L, R) :-
exclude(var, L, R).
否则,这应该是一个有效的谓词:
getElements([], []).
getElements([H|T], [H|R]) :-
nonvar(H), !,
getElements(T, R).
getElements([_|T], R) :-
getElements(T, R).
由@false突出显示的编辑,由于与最后一个句子中的匿名变量匹配,后一个getElements / 2是错误的。这里有一个修正
getElements([], []).
getElements([H|T], R) :-
var(H), !,
getElements(T, R).
getElements([H|T], [H|R]) :-
getElements(T, R).