【问题标题】:Higher-Order Function Scheme: Incrementing via Returned Value高阶函数方案:通过返回值递增
【发布时间】:2015-10-05 03:27:46
【问题描述】:

Scheme 中的某些功能存在问题

所以在这本书中我正在学习Scheme,我遇到了这个我还没有完全掌握的问题。

它要求我创建一个执行此操作的高阶函数:

(display ((incrementn 4) 2))
6

我已经坚持了几个小时,但似乎仍然没有理解基本原理。所以我转向你们所有人,希望我能更好地理解这个函数调用。

所以到目前为止我的理解是当我们定义一个这样的函数时:

(define (increment n) ______)

空格显然代表我对给定参数的以下操作。我似乎不明白的是高阶函数如何返回(增量函数的)外部参数并将其注入到定义的函数中(即(incrementn 3))

我完全理解 3 是我们将 n 递增 n 次的初始值(整数)(n 是在 ((incrementn n) x) 之外传递的参数),我们将 n 递增 1 x 次 em>

我要问你的问题是,假设 x 是一个未绑定的变量(对吗?),我如何返回该整数并将 n 增加 1 多次?这种行为的语法是什么?

【问题讨论】:

    标签: function syntax parameters lambda scheme


    【解决方案1】:

    这里要理解的一点是,在我们以3 作为初始参数调用incrementn 之后,它将返回一个函数,然后2 作为参数传递给那个功能。这称为currying,在您掌握这里的概念后,解决方案很简单:

    (define (incrementn n)
      (lambda (x)
        (+ n x)))
    

    如你所见,对incrementn的调用捕获返回的lambdan参数的值,当我们调用它时传递xn是否可以在lambda 正文中的表达式中使用。现在,它按预期工作:

    ((incrementn 4) 2)
    => 6
    
    ((incrementn -1) 3)
    => 2
    

    【讨论】:

    • 所以在这种情况下,incrementen 不仅包含 n,它还包含 (lambda (x)),即使它超出了 incrementn 的定义?编辑:您在编辑中回答了,谢谢
    • 另外,它是递增的,所以从 * 变为 + 是正确的,因为 ((incrementn -1) 3) = 2。(这是他的另一个例子)
    • @S.Shaw 好的,知道了 - 现在已修复 :)
    猜你喜欢
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    • 2011-06-22
    • 2017-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多