`
daibalusu
  • 浏览: 343762 次
文章分类
社区版块
存档分类
最新评论

学习common lisp 笔记二

 
阅读更多

学了几章Practical LISP(Practical Common Lisp), 大概悟出LISP的两大优势:

1 LISP作为函数式编程(function programming), 其函数具有很低的耦合性,给定一个函数的输入参数,其输出在任何条件下都保持不变。

LISP代码的书写就用一个函数包裹另外一个(堆)函数。

例子:

(defun prompt-for-cd ()
  (make-cd
   (prompt-read "Title")
   (prompt-read "Artist")
   (or (parse-integer (prompt-read "Rating") :junk-allowed t) 0)
   (y-or-n-p "Ripped [y/n]: ")))
这里的定义了一个函数prompt-for-cd() ,其函数体是另一个函数调用:make-cd,make-cd 的参数又由若干函数组合,像这样一级一级组织起来。


2 使用宏(macro) 生成代码,在语法层次上提高程序的抽象能力。

这里LISP的宏要比C/C++的宏强大的多,有点类似于JAVA的反射,又远超过反射的功能。

例子:

(defmacro backwards (expr) (reverse expr))
这个宏把expr中的对象序列反序,但不执行,只返回代码。所以宏的功能在于调用其它函数来生成代码,而不是计算结果。

再由这些生成的代码拼成程序运行。宏生成代码在编译时就已经完成,不占用运行时间,这点和C/C++是一样的。


以上只是初步的心得,强大的宏仍然需要重点学习。

分享到:
评论

相关推荐

    Practical Common Lisp笔记

    NULL 博文链接:https://jamsa.iteye.com/blog/1188836

    cl-notebook:Common Lisp 的笔记本式编辑器

    Common Lisp 的笔记本式浏览器内编辑器。 当然,工具可能是最微妙的陷阱。 有一天,我知道我必须粉碎翠埃马克。 向尼尔盖曼道歉 现在是预测试版 使用风险自负,偶尔会发生轻微爆炸 用法 使用 安装 Common Lisp...

    butler:用于 iPython 前端的 Common Lisp 内核

    用于 iPython 前端的 Common Lisp 内核。 请参阅了解为什么这很酷。 贡献 有关实现细节,请参阅。 实现一个基本的功能内核只需要实现: kernel_info_request kernel_info_reply execute_request execute_reply...

    darkmatter:笔记本样式的Common Lisp环境

    暗物质需求 您最喜欢的网络浏览器(Google Chrome,Firefox ...) 利贝夫安装另请参阅 。 安装要求和Roswell。 # for macOS$ brew install libev roswell# for Ubuntu/Debian$ apt-get install libev-dev# and build...

    awesome-cl-software:使用Common Lisp构建的出色应用程序软件列表

    很棒的通用Lisp应用程序软件 这是使用Common Lisp构建的出色的列表。 我们希望保留“主”列表。 如果要取消整理列表,请参阅。 目录桌面环境编者教育文件管理器游戏类图形学影像创作图像浏览器互联网浏览器激流的RSS...

    imap:POP,IMAP和SMTP客户端对Common Lisp的支持

    目录描述作者作者评论文献资料平台类依存关系安装配置执照笔记例子开源的描述用于发送和接收电子邮件的客户端库。作者约翰·弗德拉罗(Franz Inc.)作者评论访问邮箱最流行的协议是rfc1939中定义的邮局协议(POP)。...

    LICPP:Lisp风味C ++

    一个很小的库,将一些基本的Lisp(主要是Common Lisp)实用程序实现为DSL,目前只是一个玩具,提防脏乱和性能低下。 这已经在Clang 9.0,GCC 7.1和Visual Studio Community 2017中进行了测试。 用法 至少需要C ++ ...

    starred-awesome:我的GitHub明星精选清单!

    由产生内容 CoffeeScript [Common Lisp](#common lisp) 镖鹰长生不老药[Emacs Lisp](#emacs lisp) 埃尔朗FreeMarker GDScript 去盐酸HTML 车把哈斯克尔JavaJavaScript [Jupyter笔记本](#jupyter笔记本) ...

    cl-6502:Lisp中的6502仿真器

    cl-6502是的Common Lisp仿真器,汇编器和反汇编。 如果您觉得这很奇怪,MOS 6502会以其在...中的使用而闻名。 , ) 和斯蒂尔( 在27C3上的精彩演讲。 我在cl-6502上发表了名为“程序员考古学”的演讲。 您可以...

    java8集合源码-my-stars:我加星标的所有存储库

    Lisp](#common lisp) [Emacs Lisp](#emacs lisp) [Jupyter 笔记本](#jupyter 笔记本) [Visual Basic](#visual basic) 苹果脚本 - 在 Mac 上调整 Windows C - 简单且可移植(但不是不灵活)的 C 语言 GUI 库,使用它...

    java弹球游戏源码-starred:我的真棒星星

    Lisp](#common lisp) [Jupyter 笔记本](#jupyter 笔记本) [Vim 代码段](#vim 代码段) [Vim 脚本](#vim 脚本) C - 用于报告 OpenSSL FIPS 状态的基本 NGINX 模块 - Wazuh - 开源安全平台 - Обход DPI в linux -...

    constraint-algebras:关于时间,空间等的定性推理的代数

    该代码写于1990年代初期,此后仅使用Armed Bear Common Lisp(ABCL)进行了部分测试。 测试的部分似乎工作正常。 但是,它似乎不适用于Steel Bank Common Lisp(SBCL)。 截至2020年11月,此代码的更新版本正在...

    hspell:hspell 的通用 Lisp 绑定

    拼写通用 Lisp 绑定。例子HSPELL> (correct-spelling-p " עפשרות " )NIL1HSPELL> (correct-spelling " עפשרות " )( " הפשרות " " אפשרות " )HSPELL> (word-splits " כלב " )(( " כלב ...

    leetcode中文版-mixnote:混音

    这个收藏是一个知识库,收集整理了一些有用的资源,包括优秀的开源项目、笔记、帖子、文章等 星星仓库 OpenCV 开源计算机视觉库资源主页: 课程: 文档: 问答论坛: 以前的论坛(只读): 问题跟踪: 额外的 OpenCV...

    cl-spark:(spark '(1 1 2 3 5 8)) => " ▂▃▅▇"

    笔记: cl-spark 的字符编码必须是utf-8 。 如果您的 lisp 是clozure ,则在 shell 上启动 lisp 时,您需要$ ccl -K utf-8 。取决于零安装cl-test-grid 结果: 汽车: CL-REPL> (ql:quickload :cl-spark)手动的: ...

    power:电源管理并在笔记本电脑的盖子上悬挂以关闭SumpWM

    通过上位机进行功率控制的实用程序 特征 在stumpwm的笔记本电脑关闭上挂起。 挂起命令 Hibernate命令 安装 克隆回购git clone .stumpwm.d / moduls / util / power 用法 对于悬挂在笔记本电脑盖上的关闭: ...

    java俄罗斯方块源码-ossu-cs:通过开源社会大学开设的计算机科学课程

    common design patterns unit testing``object-oriented design design for testing unit testing``object-oriented design Java static typing dynamic typing ML-family languages (via Standard ML) Lisp-family ...

    cl-chan:一个简单的类似golang的通道库

    的utils的代码很多是从复制 ,如queues.lisp , threads.lisp , utils.lisp 。 我写cl-chan的原因是,作为我在cl世界中找到的唯一可用的CSP库, 测试用例可能会导致竞争状况,您可以参考此。 似乎很难修复它,因为...

    cepl.examples:CEPL 库的一些示例

    我们还使用skitter管理事件,将sdl2作为我们的主机和classimp进行模型加载(sdl2和classimp都需要外部c库) 它到处都有,但最终会被清理。 笔记 这个 repo 的master分支应该与来自 quicklisp 的 CEPL 一起工作。 ...

    eus_vive:ROS软件包,用于使用HTC ViveOculus进行机器人远程操纵

    eus_vive使用Vive / Oculus的机器人远程控制程序笔记该软件包取决于以下这些分支:经过测试的环境搭建环境Ubuntu 16.04 + ROS Kinetic NVidia驱动程序: 396.37 OpenVR: 1.3.22 Steam VR: 1.6.10 Ubuntu 18.04 + ...

Global site tag (gtag.js) - Google Analytics