我想知道是否可以在 prolog 中执行以下操作
L = [1,2,3,4,5,_,_,7].
我想做类似的事情
getElements(L, R)
返回 R = [1,2,3,4,5,7]
并忽略列表中的通配符
我想知道是否可以在 prolog 中执行以下操作
L = [1,2,3,4,5,_,_,7].
我想做类似的事情
getElements(L, R)
返回 R = [1,2,3,4,5,7]
并忽略列表中的通配符
如果你的 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).