Поверните первый аргумент функции, чтобы он стал n-м

Для функции с как минимум n аргументами, я хочу повернуть первый аргумент так, чтобы он стал n -м аргументом. Например ( в нетипизированном лямбда-исчислении):

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)))) и return Lam (b => Lam (c => Lam (a => Ap (Ap (a, b), c)))) , например.

15
задан Apocalisp 11 March 2015 в 16:57
поделиться