1

我正在尝试制作一个 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 ppvp工作我正在使用电话;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/3np/3或者pp/3

期望的目标是使用调用sentence(some_sentence)并让程序输出 和 的np pp结果vp

4

0 回答 0