微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

可能的错误或遗漏

如何解决可能的错误或遗漏

可能的错误或者我遗漏了一些明显的东西:

 test(struct(X,Y)) --> X,[isa],Y.

当我尝试使用此规则时,出现错误.. 前几天它正在工作! 该列表在规则中使用了短语(),如果我没记错的话,它应该是差异列表!!!

您的列表()显示什么?

我错过了什么?看起来很傻!!! 唯一似乎合理的是我最近升级了 SWI !!嗯..

Welcome to SWI-Prolog (threaded,64 bits,version 8.2.3)
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software.
Please run ?- license. for legal details.

For online help and background,visit https://www.swi-prolog.org
For built-in help,use ?- help(Topic). or ?- apropos(Word).

?- consult(test_grammar).
true.

?- listing(test).
test(struct(X,Y),A,B) :-
    phrase(X,C),C=[isa|D],phrase(Y,D,B).

true.

?- phrase(test(T),[this,isa,test]).
ERROR: Arguments are not sufficiently instantiated
ERROR: In:
ERROR:   [15] '$dcg':call_dcg(user:_9038,isa|...],_9032)
ERROR:   [13] test(struct(_9082,_9084),[]) at /my/dev/python3/chatbot/lib/semantics/test_grammar.pl:2
ERROR:   [12] '$dcg':call_dcg(user:test(...),[]) at /usr/lib/swi-prolog/boot/dcg.pl:368
ERROR:    [9] <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.
?- 

解决方法

你的语法规则应该是:

test(struct(X,Y)) --> [X,isa,Y].

这会给你:

?- [user].
|: test(struct(X,Y].
|: ^D% user://1 compiled 0.01 sec,1 clauses
true.

?- phrase(test(T),[this,test]).
T = struct(this,test).

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。