Functional programming 显示“cons”一词通过显示所有beta减少值来工作
我不熟悉函数式编程 因此,术语Functional programming 显示“cons”一词通过显示所有beta减少值来工作,functional-programming,lambda-calculus,cons,Functional Programming,Lambda Calculus,Cons,我不熟悉函数式编程 因此,术语cons在列表的前面追加了一个元素。在哪里 cons ≜ λx:λl:λc:λn: c x (l c n) 我应该如何证明cons对一个示例函数调用使用beta reduce正确工作?例如,将cons 3[2,1]减少为[3,2,1] lambda演算中的算术运算有类似的公式吗?与算术运算(即加法或乘法)相比,我对如何处理这个问题有点困惑 谢谢。cons≜ λx:λl:λc:λn:cx(lcn)表示 cons x l c n = c x (l c n) (
cons
在列表的前面追加了一个元素。在哪里
cons ≜ λx:λl:λc:λn: c x (l c n)
我应该如何证明cons
对一个示例函数调用使用beta reduce正确工作?例如,将cons 3[2,1]
减少为[3,2,1]
lambda演算中的算术运算有类似的公式吗?与算术运算(即加法或乘法)相比,我对如何处理这个问题有点困惑
谢谢。
cons≜ λx:λl:λc:λn:cx(lcn)
表示
cons x l c n =
c x (l c n)
(函数/应用/组合表示法)。所以
什么是[2,1]
如果不仅仅是cons2[1]
的快捷符号,那么我们继续
= c 3 (cons 2 [1] c n)
= c 3 (c 2 ([1] c n))
= c 3 (c 2 (cons 1 [] c n))
= c 3 (c 2 (c 1 ([] c n)))
因此没有从cons3[2,1]
减少到[3,2,1]
<代码>[3,2,1]是cons 3[2,1]
。而[2,1]
是cons2[1]
,[1]
是cons1[]
列表cons x xs
在提供c
和n
参数时,将变成cx(xs c n)
,而xs
也将变成;因此,任何列表的元素都会在c
的应用程序链中使用
那么,[]cn
应该变成什么呢?它没有任何东西可以通过c
应用程序进行操作——这些应用程序将应用于列表的元素,而[]
没有。因此,唯一合理的做法(我相信你已经给出了这个定义)是将[]cn
变成n
:
cons 3 [2,1] c n =
= c 3 (c 2 (c 1 ([] c n)))
= c 3 (c 2 (c 1 n ))
无论c
和n
是什么
就是这样。是的,你可以做方程变换,就像做算术公式一样。Lambda演算只是有不同的运算符和规则。请注意,您没有选择最容易使用列表表示的运算符和规则。你知道λc:λn:
是什么意思吗?我不太清楚λc:λn:是什么意思。它是否与任何列表操作(即head、tail、nil)相关?你能给我举一个例子,说明清单3[2,1]的beta缩减证明是什么样的吗?这是一个清单结构的例子。您的列表是λc:λn:(c3(c2(c1n))
(我认为在cons
的定义中,您交换了l
和c
)。现在证明这个列表在语义上等价于计算cons3(λc:λn:(c2(c1n))@Bergiconsxlcn=cx(lcn)
的结果是好的,任何东西都可以在那里交换。
cons 3 [2,1] c n =
= c 3 (c 2 (c 1 ([] c n)))
= c 3 (c 2 (c 1 n ))