我正在尝试制作一个 prolog 语言解析器。当我去加载我的脚本时,我得到了错误
ERROR: Arguments are not sufficiently instantiated ERROR: In: ERROR: [13] throw(error(instantiation_error,_1940)) ERROR: [7] <user> ERROR: ERROR: Note: some frames are missing due to last-call optimization. ERROR: Re-run your program in debug mode (:- debug.) to get more detail.
我的代码如下
sentence(Sentence,sentence(np(Noun_Phrase),vp(Verb_Phrase))):-
np(Sentence,Noun_Phrase,Rem),
vp(Rem,Verb_Phrase,[]).
np([X|T],np(det(X),NP2),Rem):-
det(X),
np2(T,NP2,Rem).
np(Sentence,Parse,Rem):- np2(Sentence,Parse,Rem).
np(Sentence,np(NP,PP),Rem):-
np(Sentence,NP,Rem1),
pp(Rem1,PP,Rem).
np2([H|T],np2(noun(H)),T):- noun(H).
np2([H|T],np2(adj(H),Rest),Rem):- adj(H),np2(T,Rest,Rem).
pp([H|T],pp(prep(H),Parse),Rem):-
prep(H),
np(T,Parse,Rem).
vp([H|[]],verb(H),Rem):-
verb(H).
vp([H|Rest],vp(verb(H),RestParsed),Rem):-
verb(H),
pp(Rest,RestParsed).
vp([H|Rest],vp(verb(H),RestParsed),Rem):-
verb(H),
np(Rest,RestParsed).
det(the).
noun(cat).
noun(mat).
verb(sat).
prep(on).
adj(big).
adj(fat).
adj(comfy).
我已经阅读了其他一些关于此的帖子,但我仍然不确定我哪里出错了。
检查np
pp
并vp
工作我正在使用电话;np([the,cat,sat,on,the,mat],O,L).
,pp([on,the,mat],P,L).
和vp([the,cat,sat,on,the,mat],O,L).
. 一次调用ERROR: Undefined procedure: vp/3 (DWIM could not correct goal)
出现错误,所有 3 次调用都是相同的错误,唯一的区别vp/3
是np/3
或者pp/3
期望的目标是使用调用sentence(some_sentence)
并让程序输出 和 的np
pp
结果vp
。