2013-02-17 38 views
1

任何人都可以帮我删除列表的最后'e'吗? 我有一个数据集:当它是单词最后删除'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理解只在最终的单词时删除'e'?

任何建议,以帮助我开始这个问题将不胜感激。

+0

delete_last(引理,New_Lemma): - 追加(New_Lemma,[E],引理)。 – CapelliC 2013-02-18 00:09:43

+0

感谢您的建议,但我尝试插入[e]代替[_],但是这会产生另一个问题,因为代码不会生成[e,a,t,er],而是会留下[e,a,t ,e,r]不在可能的答案中。 – 2013-02-18 01:34:55

回答

0

可以使用的状态下,eliding引理 '最后用后缀' 第一

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]. 
+0

谢谢!这很有道理!我很感激帮助。 – 2013-02-18 14:19:21

相关问题