我需要找到一个函数P(使用Beta - reduction)
P(g, h, i) ->* (h, i, i+1).
我被允许使用后继函数succ。从维基百科我得到了
succ = λn.λf.λx.f(n f x)
我的回答是P = λx.λy.λz.yz(λz.λf.λu.f(z f u))z
但我不太确定。我的逻辑是λx
会有效地摆脱g
字词,然后λy
。λz
会带来h
和i
通过yz
。然后succ
函数最后会引入i+1
。我只是不知道我的功能是否真的复制了这个。
感谢任何帮助
答案 0 :(得分:0)
@melpomene指出,如果不考虑具体的实现方式(例如,对于元组),此问题是无法回答的。我要假定,将您的元组实现为:
T = λabcf.f a b c
或者,如果您喜欢非速记:
T = (λa.(λb.(λc.(λf.f a b c))))
也就是说,一个函数将关闭a
,b
和c
,然后等待函数f
传递这些变量。
如果这是实现的考虑,并假设使用正常的教堂数字,那么您指定的功能:
P(g, h, i) ->* (h, i, i+1)
需要:
a
,b
和c
)succ
P
是这样的功能:
P = λt.t (λghi.T h i (succ i))
或者再次,如果您更喜欢非速记:
P = (λt.t(λg.(λh.(λi.T h i (succ i)))))
可以使用一些帮助器功能部分清除它:
SND = λt.t (λabc.b)
TRD = λt.t (λabc.c)
在这种情况下,我们可以将P
写为:
P = λt.T (SND t) (TRD t) (succ (TRD t))