如何解决我可以在运行时添加谓词吗?
上下文是一个谓词系统:规则和事实,它们共同确定要支付给客户的金额,具体取决于客户的情况。大多数规则和事实在编译时已知,但有关特定情况的事实仅在运行时、处理支付请求时才知道。我知道如何在编译时知道所有谓词(即是源代码的一部分)的情况下在 Mercury 中对系统进行编程,但我不知道如何在运行时引入谓词。是否可以编写一个函数,用给定的参数构造一个谓词,然后能够将构造的谓词用作计算金额的上下文的一部分?
解决方法
我不确定你的问题到底是什么。
如果通过“用给定的参数构造一个谓词”,你是在问你是否可以构造一个包含对一个引用的闭包 原始编译程序中的谓词及其值的列表 在运行时构造的初始参数,那么答案是“是的,你可以这样做”。
如果你的意思是你是否可以在运行时构造一个谓词,其代码 不是最初编译的程序的一部分,那么在 Mercury 中答案是“不,你不能这样做”。但是, 可以通过
解决这个问题- 将新谓词的代码写入新的 Mercury 模块;
- 将该模块编译为目标代码;
- 使用动态链接使新目标文件成为现有可执行文件的一部分;和
- 使用外部代码接口将目标语言 C 指针或其在其他语言中的等价物传输到原始代码,以供其调用。
但是,对于实施者不了解 Mercury 实施工作原理的任何人,不建议使用此方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。