gpt4 book ai didi

Python:带有 cons、car 和 cdr 的函数式编程

转载 作者:行者123 更新时间:2023-12-04 08:51:59 25 4
gpt4 key购买 nike

有这个问题是这样的:

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


现在,我已经看到了解决方案,但我想知道是否有人可以解释如何实际思考以达到解决方案?
  • cdr(cons(3, 4)) : 这两个函数的计算顺序是什么?我通常会认为 cons(3, 4)首先评估,但在这种情况下没有意义,因为 cons(3, 4)返回一个函数,其中参数 3 和 4 是“集成的”,因此无法挑出参数。
  • 在我看来 car(f)返回一个函数,那么如何才能 cons(3, 4)返回 3 ?
    编辑 : 错别字,应该是 car(cons(3, 4))而不是 cons(3, 4)
  • 我显然是想解决这个问题,因为我想学习 Python,但是你会建议我跳过这些问题吗?我很想通过阅读这里来这样做:Why program functionally in Python?

  • 解决方案:
    def cons(a, b):
    def pair(f):
    return f(a, b)
    return pair

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

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

    print(car(cons(3,4)))
    Output: 3
    print(cdr(cons(3,4)))
    Output: 4

    最佳答案


  • a(b()) , b将始终首先被评估。我不知道 Python 中有任何异常(exception)。 a需要是一个宏才能反转为真。
    请注意 cdr 的名称和 car的参数为: f ,就像在“功能”中一样。每个函数都接受一个函数作为参数。但这有效,因为正如您所指出的, cons返回一个函数。
    car(cons(3,4)) , cons返回一个函数(本地称为 pair )。然后将该函数赋予 car , 和 car在这里使用它: f(pair) .在这种情况下, f是传入的函数。这里比较复杂的部分是 f是一个函数,它接受另一个函数,并用两个参数调用它。这两个参数是提供给 cons 的数据。原: 34 .
  • cons(3, 4)不返回 3 , car(cons(3,4))做。 cons(3, 4)返回一个作用于提供给它的数据的函数。在这种情况下, carpair函数最终丢弃了第二个传递的参数( 4 ),而是返回第一个( 3 )。

  • 是的,暂时远离这样的代码。传递函数非常有用,但这段代码更像是一个实验玩具。这是显示样式的理论代码(基于术语,源自类似于 Scheme 的 lisp)。有许多更简单的方法可以实现相同的最终结果。
    练习 Higher Order Functions的简单例子(如 mapreduce ),熟练使用它们,然后重新访问此代码。理解起来仍然很困难(因为,这段代码并不容易理解),但它会更有意义。

    关于Python:带有 cons、car 和 cdr 的函数式编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64052710/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com