在VDM-SL中指定隐式函数时,是否可以指定curried函数?在下面的test1和test2中是明确的uncurried和curried函数,而test3是一个隐式的uncurried函数。所有都被Overture接受。 test4是对一个隐含的curried函数的尝试,但它被Overture拒绝。
另外,有没有办法用隐式函数定义指定它应该是total?
module moduleName
exports all
definitions
functions
test1 : nat * nat +> nat
test1 (arg1,arg2) == arg1+arg2;
test2 : nat -> nat +> nat
test2 (arg1) (arg2) == arg1+arg2;
test3 (arg1:nat,arg2:nat) res:nat
post res = arg1+arg2;
test4 (arg1:nat) (arg2:nat) res:nat
post res = arg1+arg2;
end moduleName
答案 0 :(得分:2)
不,我担心curried函数仅用于显式函数定义。隐式定义没有部分/总指标。
(我刚才问我们为什么会有这种差异。这似乎与语言的历史有关:英语学校产生了隐含的功能,但没有学习,而丹麦学校则有明确的功能和干扰。他们应该真的协调 - 你的猜测语法可能就是结果。)