scheme - 是否有 SICP 练习的风格指南?
问题描述
我目前正在通过 SICP 工作,但我还不太习惯编写 Scheme 代码的风格。有什么风格指南可以作为这本书的伴侣吗?到目前为止,我只找到了第 1.1.1 节中关于“漂亮打印”的评论。
解决方案
Gerald Jay Sussman是SICP的作者之一,也是 Scheme 的作者之一。他们1986 年在 HP的非常酷的视频讲座,他们并不认为 Scheme 会那么有名,所以他们将其称为更通用的名称 Lisp。不要混淆,因为 SICP 是 100% 方案,因此方案编码风格将是正确的路径。
Scheme wiki 有一个样式指南以及通用变量命名约定和注释样式。
Scheme 是 Lisp 的一种新方言,具有词法闭包和一个命名空间作为核心功能。它使用,和define
代替. DrRacket IDE 实际上将带有以“de”开头的运算符的列表视为. 例如。defun
defparameter
defvar
define
;;; example procedure test
(define (test arg1 arg2)
;; two space indent after define, let and friends
(if (test? arg1 arg2) ; predicates tend to end with ?
(consequent arg1 arg2) ; if you split if then arguments align
(alternative "extra long argument" ; if you split arguments in procedure call arguments are aligned
arg1
arg2))) ; ending parens keep together
在 Common Lisp 中,大部分编码风格是相同的:
;;; example function test
(defun test (arg1 arg2)
;; two space indent after defun, let and friends
(if (testp arg1 arg2) ; predicates tend to end with p
(consequent arg1 arg2) ; if you split if then arguments align
(alternative "extra long argument" ; if you split arguments in procedure call arguments are aligned
arg1
arg2))) ; ending parens keep together
Common Lisp 风格的标准参考,包括注释约定,是 Peter Norvig 和 Kent Pitman 的优秀 Lisp 编程风格教程。您可以将其用作方案资源的补充。
PS:编码风格固执己见。该语言不太关心这些,所以这只是为了使代码更易于人类阅读。
推荐阅读
- .net-core - 我在 .NET Core 3.1 应用程序中收到错误“Microsoft.AspNetCore.Hosting.Abstractions,Version=3.1.0.0”
- javascript - Three.js:如何为 CSS3DRenderer 场景取 DOM 对象?
- amazon-web-services - dynamo DB如何存储数据?
- mysql - mysql 正则表达式模式匹配[Weather Observation Station 11]
- mysql - 正在返回包括 Null 在内的 MYSQL 值
- html - 使用 line-height: 100% 是错开元素而不是使它们在高度上匹配
- database - 基于结构文件的成本分析
- scipy - 一尾二样本 T 检验
- python - Mocking a function from builtin class
- javascript - 循环音频文件 discord.js