【发布时间】:2015-10-06 12:52:08
【问题描述】:
min 通常在无类型 lambda 演算中定义为(使用 Caramel's syntax):
sub a b = (b pred a)
<= a b = (is_zero (sub b a))
min a b = (<= a b a b)
这是非常低效的。 Sub 是二次的,因为它适用于 pred(这是线性的)b 次。 min 的实现效率更高:
min a b succ zero = (a a_succ (const zero) (b b_succ (const zero))))
a_succ pred cont = (cont pred)
b_succ pred cont = (succ (cont pred))
这会以连续传递的方式遍历两个数字,直到到达第一个零。现在,我正在尝试找到一个与min 一样高效的max,它具有以下属性:
a和b在函数体中最多使用一次。它具有 beta 范式(即,不使用定点组合器是强归一化的)。
这样的max定义存在吗?
【问题讨论】:
-
我记得 Loic Colson 研究过这类问题:System T, call by value and the minimum problem, TCS 206, 1998。我看了看,但找不到关于 max 的任何具体信息。
-
@AndreaAsperti 啊原来问题不那么难,让我来回答吧
-
@AndreaAsperti 哦,刚刚注意到我要求
a和b只使用一次。该死的我和我的苛刻问题。
标签: functional-programming lambda-calculus caramel