Пролог парсер естественного языка, Аргументы недостаточно проработаны - PullRequest
0 голосов
/ 12 января 2019

Я пытаюсь сделать парсер языка пролога. когда я иду, чтобы загрузить свой скрипт, я получаю ошибку

 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.

...