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))@Bergi
consxlcn=cx(lcn)
的结果是好的,任何东西都可以在那里交换。
cons 3 [2,1] c n = 
 = c 3 (c    2 (c    1 ([] c n)))
 = c 3 (c    2 (c    1       n ))