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]を除くデータベース内のすべての補題に適しています。単語が最後の場合にのみ「e」を削除することをPrologに理解させるにはどうすればよいですか?

私がこの問題を始めるのを助けるためのどんな提案も大いにありがたいです。

4

1 に答える 1

0

条件を使用して、最初に接尾辞を付けて lemma ' last を省略できます

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 に答える