1

谁能帮我删除列表的最后一个“e”?我有一个数据集:

lemma([c,h,a,s,e],[vb,t]).
lemma([e,a,t],[vb,t]).
lemma([l,i,k,e],[vb,t]).
lemma([d,i,e],[vb,i]).
lemma([s,n,e,e,z,e],[vb,i]).

我的代码是:

q0(Token,[vb,_]) :-
   lemma(Lemma,[vb,_]),
   delete_last(Lemma,New_Lemma),
   suffix(Sff),
   append(New_Lemma,Sff,Token).

delete_last(Lemma,New_Lemma) :-
   append(New_Lemma,[_],Lemma).

suffix([e,r]).

到目前为止,我的代码删除了列表的最后一个元素,这对于数据库中的任何引理都很好,除了引理 [e,a,t]。我如何让 Prolog 理解在它的单词 final 时只删除'e'?

任何帮助我解决这个问题的建议将不胜感激。

4

1 回答 1

0

您可以使用条件,省略引理' last 和 suffix' first

q0(Token,[vb,_]) :-
   lemma(Lemma,[vb,_]),
   suffix([X|Xs]),
   (  last(Lemma, X)
   -> append(Lemma, Xs, Token)
   ;  append(Lemma, [X|Xs], Token)
   ).

测试

?- q0(T, [vb,_]).
T = [c, h, a, s, e, r] ;
T = [e, a, t, e, r] ;
T = [l, i, k, e, r] ;
T = [d, i, e, r] ;
T = [s, n, e, e, z, e, r].
于 2013-02-18T06:43:20.107 回答