如果我们知道 k(l-1)=f(l) 对所有类型为 int->int 的函数 f 和类型为 int 的 l 成立,我们能否确定函数 "k"?
Can we determine function "k", if we know k(l-1)=f(l) holds for all function f of type int->int and l of type int?
假设k 和f 都是int -> int 类型的函数。如果我们知道 k(l-1)=f(l) 对所有类型为 int 的 l 成立,我们能确定 k 是函数 v->f(v+1) 吗?
我在做函数式编程练习时有这个问题:转换长度函数
let rec len xs =
match xs with
| [] -> 0
| x:xr -> 1 + len xr;;
到延续传递版本。我对这个练习的回答是
let rec lenc xs k =
match xs with
| [] -> k 0
| x:xr -> lenc xr (fun v -> k(v+1))
但我不确定 (fun v -> k(v+1))
部分是否可以用其他解决方案代替。要知道这一点,我们需要确定一个唯一的“k”,假设 k(l-1)=f(l) 适用于所有类型为 int->int 的函数 f 和类型为 int?
你想要数学证明吗?
(1) k(i - 1) = f(i)
(2) j = i - 1
来自 (1) & (2):
(3) k(j) = f(i)
来自 (2):
(4) i = j + 1
来自 (3) & (4)
(5) k(j) = f(j + 1)
q.e.d.
当然(fun v -> k(v+1))
就是你的k
里面的k
就是f
假设k 和f 都是int -> int 类型的函数。如果我们知道 k(l-1)=f(l) 对所有类型为 int 的 l 成立,我们能确定 k 是函数 v->f(v+1) 吗?
我在做函数式编程练习时有这个问题:转换长度函数
let rec len xs =
match xs with
| [] -> 0
| x:xr -> 1 + len xr;;
到延续传递版本。我对这个练习的回答是
let rec lenc xs k =
match xs with
| [] -> k 0
| x:xr -> lenc xr (fun v -> k(v+1))
但我不确定 (fun v -> k(v+1))
部分是否可以用其他解决方案代替。要知道这一点,我们需要确定一个唯一的“k”,假设 k(l-1)=f(l) 适用于所有类型为 int->int 的函数 f 和类型为 int?
你想要数学证明吗?
(1) k(i - 1) = f(i)
(2) j = i - 1
来自 (1) & (2):
(3) k(j) = f(i)
来自 (2):
(4) i = j + 1
来自 (3) & (4)
(5) k(j) = f(j + 1)
q.e.d.
当然(fun v -> k(v+1))
就是你的k
里面的k
就是f