【发布时间】:2011-07-08 11:24:49
【问题描述】:
给定一个至少有 n 参数的函数,我想旋转第一个参数,使其成为 nth 参数。例如(在无类型 lambda 演算中):
r(λa. a) = λa. a
r(λa. λb. a b) = λb. λa. a b
r(λa. λb. λc. a b c) = λb. λc. λa. a b c
r(λa. λb. λc. λd. a b c d) = λb. λc. λd. λa. a b c d
等等。
你能用通用的方式写r吗?如果你知道n >= 2怎么办?
这是 Scala 中陈述的问题:
trait E
case class Lam(i: E => E) extends E
case class Lit(i: Int) extends E
case class Ap(e: E, e: E) extends E
例如,旋转应采用Lam(a => Lam(b => Lam(c => Ap(Ap(a, b), c)))) 并返回Lam(b => Lam(c => Lam(a => Ap(Ap(a, b), c))))。
【问题讨论】:
-
我们可以使用 zygohistomorphic prepromorphisms 吗?
-
@alvivi:该死的!现在我对那些 zygo-thingies 太好奇了,不了解它们就去睡觉。
-
@alvivi -- 以为你想知道:我的拼写检查器建议 symplesiomorphic pleomorphism 用于 zygohistomorphic prepromorphisms。
标签: scala haskell functional-programming lambda-calculus