隐式函数:柯里化和整体性
Implicit functions: currying and totality
在VDM-SL中指定隐式函数时,是否可以指定柯里化函数?在下面的 test1 和 test2 是显式未柯里化和柯里化函数,而 test3 是隐式未柯里化函数。 Overture 全部接受。 test4 是对隐式柯里化函数的尝试,但被 Overture 拒绝了。
另外,有没有办法用隐式函数定义指定它应该是总计?
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
不,恐怕只为显式函数定义提供柯里化函数。并且没有 partial/total 用于隐式定义的指示符。
(我只是问为什么我们会有这种差异。这似乎与语言的历史有关:英语学派产生隐式函数但没有柯里化,而丹麦学派有显式函数但柯里化。他们应该真的要协调 - 你猜的语法可能就是结果。)
在VDM-SL中指定隐式函数时,是否可以指定柯里化函数?在下面的 test1 和 test2 是显式未柯里化和柯里化函数,而 test3 是隐式未柯里化函数。 Overture 全部接受。 test4 是对隐式柯里化函数的尝试,但被 Overture 拒绝了。
另外,有没有办法用隐式函数定义指定它应该是总计?
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
不,恐怕只为显式函数定义提供柯里化函数。并且没有 partial/total 用于隐式定义的指示符。
(我只是问为什么我们会有这种差异。这似乎与语言的历史有关:英语学派产生隐式函数但没有柯里化,而丹麦学派有显式函数但柯里化。他们应该真的要协调 - 你猜的语法可能就是结果。)