我们可以将密码函数作为prolog中的规则编写,即
C = enc(K, M).
M = dec(K, C).
我不想要低级详细信息,但想要编写一个函数来为我提供此功能。如果在prolog中不可能,那么有人可以给我推理,因为这个原因prolog不支持这种功能。
答案 0 :(得分:4)
在ISO标准Prolog中我不相信你可以,但SWI-Prolog有extension允许这样做。如果您定义谓词
enc(K, M, Result) :- % whatever
dev(K, C, Result) :- % whatever
在第三个参数中返回结果,你可以说
:- arithmetic_function(enc/2).
:- arithmetic_function(dec/2).
并使用
C is enc(K, M).
等。您无法使用=
执行此操作,因为它在Prolog中具有特殊含义:将变量C
与术语(数据结构)enc(K,M)
统一。
答案 1 :(得分:0)
我对仿函数一无所知,prolog也不了解它们。 你可以只使用谓词 - 事实,连接一些变量。
例如
encode(+Key, +Message, -CodeMessage)/3
decode(+Key, +CodeMessage, -OriginalMessage)/3
这意味着,只有当您知道密钥和消息时,您才能使用encode / 3谓词获取此消息的代码。只有知道了消息的密钥和代码,才能获得带有decode / 3谓词的原始消息。