0

我想知道是否可以在 prolog 中执行以下操作

L = [1,2,3,4,5,_,_,7].

我想做类似的事情

getElements(L, R)

返回 R = [1,2,3,4,5,7]

并忽略列表中的通配符

4

1 回答 1

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).
于 2012-11-18T07:32:35.483 回答