优秀的Lisp编程风格教程:第三章(译文)

原文链接:https://norvig.com/luv-slides.ps

3. 使用接近标准的工具

有些功能不是内建在语言中,但大多数程序员都在使用。这分为语言的扩展和帮助您开发程序的工具。

扩展

  • defsystem 用来定义一个程序
  • CLIM、CLX等图形化库

工具

  • 来自 FSF、Lucid 的 emacs
    缩进,字体/颜色支持
    定义/参数列表/文档/正则查找
    和lisp交互
  • 来自CMU的 xref、manual 等等
  • 来自供应商的浏览器,调式器,分析器

DEFSYSTEM

选择一个公共领域版本的defsystem(不幸的是,dpANS CL 没有标准)。

  • 绝对路径名只放在一个地方
  • 使用 defsystem 加载所有内容
  • 区分编译和加载
  • 有选择地做版本控制
(defpackage "PARSER" ...)

(defsystem parser
  (:source "/lab/indexing/parser/*")
  (:parts utilities "macros" "grammar" "tokenizer"
          "optimizer" "debugger" "toplevel"
          #+CLIM "clim-graphics" #+CLX "clx-graphics"))
  • 确保你的系统加载时没有编译器警告
    (第一次和之后的几次)
    (学习使用(declare (ignore ...))
  • 确保系统可以从头编译
    (消除挥之不去的引导问题)

编辑器命令

你的编辑器应该可以做下面操作:

  • 按s表达式移动并显示匹配的父级
  • 适当缩进代码
  • 寻找不平衡的括号
  • 用字体和颜色装饰代码
  • 找到任何符号的定义
  • 找到任何符号的参数和文档
  • 宏展开任意表达式
  • 将当前表达式、区域或文件发送给Lisp进行求值或编译
  • 保存发送到Lisp的命令的历史记录,并允许您编辑和重新发送它们
  • 使用键盘、鼠标和菜单

Emacs可以完成所有这些工作。如果你的编辑器不能,抱怨直到它被修复,或者换一个新的。

Emacs:缩进和注释

不要尝试去自己缩进。
反而,应该让编辑器来完成这个。
一种近乎标准的形式已经形成。

  • 80列的最大宽度
  • 遵守注释规约
    ;用于行内注释
    ;;用于函数内注释
    ;;;用于函数间注释
    ;;;;用于段落头(用于大纲模式)
  • cl-indent库可以配置如何缩进
    (put 'defvar 'common-lisp-indent-function '(4 2 2))
  • lemacs可以提供字体和颜色
(hilit::modes-list-update "Lisp"
  '((";;.*" nil hilit2) ...))

猜你喜欢

转载自blog.csdn.net/zssrxt/article/details/133667533