修改自动推理课程,我不太明白如何回答这个问题:
展示如何使用lambda抽象在高阶逻辑中定义对(x, y)
的概念。定义一个函数π1,它返回这样一对的第一个元素。最后,显示π1(x, y) = x.
我在stackoverflow上发现了类似的问题,但它们都与我从未使用过的方案有关。可以理解英文/相关数学符号的解释
答案 0 :(得分:3)
你去吧
PAIR := λx. λy. λp. p x y
π1 := λp. p (λx. λy. x)
π2 := λp. p (λx. λy. y)
π1 (PAIR a b) => a
π2 (PAIR a b) => b
查看Church encoding上的wiki条目,了解一些好的例子
答案 1 :(得分:2)
这个问题的主题是了解数据如何表示为函数。当你使用其他范例时,通常的思维方式是“数据=存储在变量中的东西”(可以是数组,对象,你想要的任何结构)。
但是当我们进行函数式编程时,我们也可以将数据表示为函数。 所以假设你需要一个函数对(x,y)
这是“伪”lisp语言:
(function pair x y =
lambda(pick)
if pick = 1 return x
else return y )
该示例显示了一个返回lambda函数的函数,该函数需要一个参数。
(function pi this-is-pair = this-is-pair 1)
this-is-pair应该用一对函数构造,因此,参数是一个期望其他参数(pick)的函数。
现在,你可以测试你需要的东西
(pi (pair x y ) ) should return x
我强烈建议您观看有关compound data的视频。大多数示例都是在lisp上制作的,但理解这样的概念很有用。
答案 2 :(得分:0)
对或元组描述Products Domain,是集合A的所有元素和集合B的所有元素的并集:
A × B = { (a, b) | a ∈ A, b ∈ B }
这里,A和B是不同的类型,所以如果您使用像C,Java这样的语言程序,则可以使用(String, Integer)
,(Char, Boolean)
,(Double, Double)
< / p>
现在,函数π1只是一个函数,它接受一对并返回第一个元素,这个函数通常在first
中调用,而它就是π1(x, y) = x
的样子,在另一个上你有第二个,做同样的事情,但返回第二个元素:
fst(a, b) = a
snd(a, b) = b
当我在大学学习签名“编程语言的特征”时,我们的教授推荐了这个 book,,请参阅产品领域< / strong>很好地理解所有这些概念。