首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >lisp概念和术语需要帮助

lisp概念和术语需要帮助
EN

Stack Overflow用户
提问于 2014-01-19 22:57:24
回答 2查看 117关注 0票数 1

我在网上搜索过答案,但运气不佳,所以如果这是一个重复的问题,请原谅我。我将陈述我的questions:= (?)因此,以及在下面代码中的注释中。(我使用的是Emacs,带有clisp和Slime):

代码语言:javascript
复制
    ;; is this called nested function or partial application or what(?)

    (defun create-function(a)
        (defun add-function(x)(+ x a)))

    ->(create-function 8)
    ->ADD-FUNCTION
    ->(add-function 3)
    ->11

我可以看到链接这些“部分应用程序”的好处,但这本身并不是赛跑,对吗(?)好吧,让我们来看看我的观察是否正确:

代码语言:javascript
复制
    ;; the 'let statement *binds* 'loc to the 'clos object with 10 being the argument
    ;; for the formal parameter x. when funcall is applied to 'loc with 20 for y, the
    ;; lambda expression substitutions are complete and 200 is returned(?). 

    (defun close(x)
        (lambda(y)(* x y)))
    ->CLOSE
    (let ((loc (close 10)))
        (funcall loc 20))
    ->200

上面的代码是闭包(?)由于let语句中的loc范围:如果clos是一个可变变量,那么它只会在'let语句(?)中更改值。最后,如果有人能告诉我如何让步骤宏与上述函数保持良好关系,这将非常有帮助,(他们立即……)谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-20 05:43:47

第一个例子既可以称为嵌套函数,也可以称为部分计算。但下一个例子是更地道的。这两者都可以称为手动赛跑,虽然通常理解为自动过程。您可以在Lisp中使用以下运行方式(一个变体):

代码语言:javascript
复制
(defun curry (function &rest arguments)
  (lambda (&rest more)
    (multiple-value-call function
                         (values-list arguments) (values-list more))))

谈到闭包问题:funcalllet下不是闭包-闭包是let中的函数定义。实际上,第一个例子是闭包,因为您在另一个函数中定义了一个函数,每个函数都引入了类似于let绑定的内容。

然而,在您的情况下,一个更典型的例子是:

代码语言:javascript
复制
(let ((z 10))
  (defun close (x)
    (* x z))
->CLOSE
(close 20)
->200

在这里,z是在闭包中捕获的变量。

票数 0
EN

Stack Overflow用户

发布于 2014-01-20 06:11:36

第一个例子既不是嵌套函数,也不是部分应用程序。相反,它评估内部defun,每次调用外部函数时重新定义全局可见的add-function。我不认为那种模式有什么特别的名字。

普通的Lisp确实具有具有fletlabels表单的词汇作用域嵌套函数。

在第二个示例中,函数close返回一个闭包(一个函数值,它引用在该函数主体之外的词汇绑定变量)。您对返回值所做的操作并不会影响返回值的类型。

除非您需要额外的调试信息,否则step在SBCL中将是非常无用的。为此,请将此表格放在函数前面:

代码语言:javascript
复制
(proclaim '(optimize (debug 3)))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21223784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档