GNU Prolog中编译前的术语展开



给定以下指令+谓词元组:

:- web_resource(plaintext/1, [content_type(text/plain)]).
plaintext(Result) :-
...code...

我如何告诉gplc将这段代码转换成

plaintext([headers(['Content-Type'-'text/plain']),
payload(Payload)]) :-
old_plaintext(Payload).
old_plaintext(Payload) :-
...code...

在编译之前?old_payload可以递归定义

GNU Prolog期限扩展目前是有限的。但是您可以使用Logtalk(它支持GNU Prolog)术语扩展机制来实现这种转换。简而言之,定义一个Logtalk钩子对象与您的扩展规则,然后扩展您的Prolog源文件,通过使用logtalk_compile/2谓词。比如:

:- object(my_expansion,
implements(expading)).
term_expansion((:- web_resource(Name/Arity, Headers) Clauses) :-
% construct clauses
...
:- end_object.

然后:

$ gplgt
...
| ?- {my_expansion}.
...
| ?- logtalk_compile('my_source_file.pl', [hook(my_expansion), scratch_directory('.']).
...

最后一次查询将导致在当前目录中保存一个新的Prolog文件,其中包含扩展结果。您可以像往常一样使用gplc编译这个文件。有关可移植Logtalk术语扩展机制的详细信息,请参见:https://logtalk.org/manuals/userman/expansion.html

相关内容

  • 没有找到相关文章

最新更新