简单应用场景下的闭包

3

我不理解以下的面试实战问题:

cons(a, b) constructs a pair, and car(pair) and cdr(pair) return the first and last element of that pair. For example, car(cons(3, 4)) returns 3, and cdr(cons(3, 4)) returns 4.

Given this implementation of cons:

def cons(a, b):
    def pair(f):
        return f(a, b)
    return pair

Implement car and cdr.

这个有什么实际应用呢?
1个回答

1

Cons是一个接受两个参数并返回一个将函数应用于一对的函数,因此我们可以以相同的方式构建carcdr

def car(pair):
    def unpack(a, b):
        return a
    return pair(unpack)


def cdr(pair):
    def unpack(a, b):
        return b
    return pair(unpack)

这是一个来自函数式编程的例子/练习,其中一切都可以抽象为函数(简单地说)。例如,它在使用Haskell或Racket等语言时具有实际用途。但我认为它不应该是Python的真正生产就绪选项(仅个人意见)。
正如您所看到的,代码中除了参数本身之外没有涉及任何变量:
>>> car(cons(1, 2))
1
>>> cdr(cons(1, 2))
2

1
我认为你的意思是“**cons**是一个接受两个参数的函数…” - Felix Kling

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接