当前位置: 首页 > 编程笔记 >

common-lisp 定义匿名函数

邓越泽
2023-03-14
本文向大家介绍common-lisp 定义匿名函数,包括了common-lisp 定义匿名函数的使用技巧和注意事项,需要的朋友参考一下

示例

Common Lisp中的函数是一等值。可以使用创建匿名函数lambda。例如,这是3个参数的函数,然后我们使用调用funcall

CL-USER> (lambda (a b c) (+ a (* b c)))
#<FUNCTION (LAMBDA (A B C)) {10034F484B}>
CL-USER> (defvar *foo* (lambda (a b c) (+ a (* b c))))
*FOO*
CL-USER> (funcall *foo* 1 2 3)
7

匿名函数也可以直接使用。Common Lisp为此提供了一种语法。

((lambda (a b c) (+ a (* b c)))    ; the lambda expression as the first
                                   ; element in a form
  1 2 3)                           ; followed by the arguments

匿名函数也可以存储为全局函数:

(let ((a-function (lambda (a b c) (+ a (* b c)))))      ; our anonymous function
  (setf (symbol-function 'some-function) a-function))   ; storing it

(some-function 1 2 3)                                   ; calling it with the name

带引号的lambda表达式不是函数

请注意,带引号的lambda表达式不是Common Lisp中的函数。这并不能正常工作:

(funcall '(lambda (x) x)
         42)

要将带引号的lambda表达式转换为函数,请使用coerce,eval或funcall:

CL-USER > (coerce '(lambda (x) x) 'function)
#<anonymous interpreted function 4060000A7C>

CL-USER > (eval '(lambda (x) x))
#<anonymous interpreted function 4060000B9C>

CL-USER > (compile nil '(lambda (x) x))
#<Function 17 4060000CCC>
           

 类似资料:
  • 本文向大家介绍common-lisp 高阶函数,包括了common-lisp 高阶函数的使用技巧和注意事项,需要的朋友参考一下 示例 Common Lisp包含许多高阶函数,这些函数是传递给参数的函数并调用它们。也许最根本的是funcall和apply: 还有许多其他高阶函数,例如,将函数多次应用于列表的元素。            

  • 本文向大家介绍common-lisp 你好,名字,包括了common-lisp 你好,名字的使用技巧和注意事项,需要的朋友参考一下 示例 这是一个稍微高级的示例,显示了普通lisp的其他一些功能。我们从一个简单的Hello, World!功能开始,并在REPL上演示一些交互式开发。请注意,从分号;到行的其余部分的所有文本均为注释。 这突出显示了Common Lispformat函数的一些高级功能,

  • 本文向大家介绍common-lisp 广义布尔,包括了common-lisp 广义布尔的使用技巧和注意事项,需要的朋友参考一下 示例 实际上,任何与Common Lisp中的值不同的值都NIL被视为真实值。例如: 可将此事实与布尔运算符结合使用,以使程序更简洁。例如,上面的示例等效于: 宏OR按从左到右的顺序评估其参数,并在找到非NIL值后立即停止并返回。如果所有参数都为NIL,则返回的值为NIL

  • Common Lisp Koans(lisp-koans)是一个语言学习练习程序,类似 ruby koans,python koans 等等。Common Lisp Koans 主要是帮助学习一些 lisp 规范特性和改进,可以学习到大量的 Common Lisp 语言特性。 终端,在文件 'contemplate.lsp' 执行 lisp 解析器: sbcl --script contempla

  • 问题 你想为 sort() 操作创建一个很短的回调函数,但又不想用 def 去写一个单行函数, 而是希望通过某个快捷方式以内联方式来创建这个函数。 解决方案 当一些函数很简单,仅仅只是计算一个表达式的值的时候,就可以使用lambda表达式来代替了。比如: >>> add = lambda x, y: x + y >>> add(2,3) 5 >>> add('hello', 'world') 'h

  • Steel Bank Common Lisp (SBCL) 源自于 CMUCL, 是一种高性能的Common Lisp编译器。它是开源/免费软件,采用自由许可。除了ANSI Common Lisp的编译器和运行系统,它提供了一个交互的运行环境,包括一个调试器,统计分析器,一个代码覆盖工具,以及许多其他的扩展。 SBCL 可运行于许多 POSIX 平台上,Windows 上现为试验阶段。