Я пытаюсь сделать парсер языка пролога. когда я иду, чтобы загрузить свой скрипт, я получаю ошибку
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
.