第六篇:函数.pdfVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第六章:函数 理解函数是理解 Lisp 的关键之⼀。概念上来说,函数是 Lisp 的核⼼所在。实际上 呢,函数是你⼿边最有⽤的⼯ 之⼀。 6.1 全局函数 (Global Functions) 6.2 局部函数 (Local Functions) 6.3 参数列表 (Parameter Lists) 6.4 ⽰例:实⽤函数 (Example: Utilities) 6. 闭包 (Closures) 6.6 ⽰例:函数构造器 (Example: Function Builders) 6.7 动态作⽤域 (Dynamic Sc​​ope) 6.8 编译 (Compilation) 6.9 使⽤递归 (Using Recursion) Chapter 6 总结 (Summary) Chapter 6 练习 (Exercises) 6.1 全局函数 (Global Functions) 谓词 fboundp 告诉我们,是否有个函数的名字与给定的符号绑定。如果⼀个符号是 函数的名字,则 symbol-function 会返回它: (fboundp +) T (symbol-function +) #Compiled-function + 17BA4 可通过 symbol-function 给函数配置某个名字: (setf (symbol-function add2) #(lambda (x) (+ x 2))) 新的全局函数可以这样定义,⽤起来和 defun 所定义的函数⼀样: (add2 1) 3 实际上 defun 做了稍微多的⼯作,将某些像是 (defun add2 (x) (+ x 2)) 翻译成上述的 setf 表达式。使⽤ defun 让程序看起来更美观,并或多或少帮助了 编译器,但严格来说,没有 defun 也能写程序。 通过把 defun 的第⼀个实参变成这种形式的列表 (setf f) ,你定义了当 setf 第 ⼀个实参是 f 的函数调⽤时,所会发⽣的事情。下⾯这对函数把 primo 定义 成 car 的同义词: (defun primo (lst) (car lst)) (defun (setf primo) (val lst) (setf (car lst) val)) 在函数名是这种形式 (setf f) 的函数定义中,第⼀个实参代表新的数值,⽽剩余的 实参代表了传给 f 的参数。 现在任何 primo 的 setf ,会是上⾯后者的函数调⽤: (let ((x (list a b c))) (setf (primo x) 480) x) (480 b c) 不需要为了定义 (setf primo) ⽽定义 primo ,但这样的定义通常是成对的。 由于字符串是 Lisp 表达式,没有理由它们不能出现在代码的主体。字符串本⾝是没有 副作⽤的,除⾮它是最后⼀个表达式,否则不会造成任何差别。如果让字符串成 为 defun 定义的函数主体的第⼀个表达式, (defun foo (x) Implements an enhanced paradigm of diversity x) 那么这个字符串会变成函数的⽂档字符串 (documentation string )。要取得函数的⽂ 档字符串,可以通过调⽤ documentation 来取得: (documentation foo function) Implements an enhanced paradigm of diversity 6.2 局部函数 (Local Functions) 通过 defun 或 symbol-function 搭配 setf 定义的函数是全局函数。你可以像存 取全局变量那样,在任何地⽅存取它们。定义局部函数也是有可能的,局部函数和局 部变量⼀样,只在某些上下⽂内可以访问。 局部函数可以使⽤ labels 来定义,它是⼀种像是给函数使⽤的 let 。它的第⼀个 实参是⼀个新局部函数的定义列表,⽽不是⼀个变量规格说明的列表。列表中的元素 为如下形式: (name parameters . body) ⽽ labels 表达式剩余的部份,调⽤ name 就等于调 ⽤ (lambda parameters

文档评论(0)

kehan123 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档