在方案中匹配 parens

Matching parens in scheme

我正在尝试在方案中编写一些代码。这是执行斐波那契的示例:

(define (fib n)
  ; if n == 0:
  (if (= n 0)
  ;   return 0
      0
  ; else if n==1
  (if (= n 1)
  ; return 1
     1
  ; else return fib(n-1) + fib(n-2)
     (+ (fib (- n 1)) (fib (- n 2)))))
)
(fib 4)
(fib 3)
(fib 2)
(fib 1)
(fib 0)
3
2
1
1
0

我的问题更多是关于一般建议。您到底是如何跟踪所有括号的?这与其说是易读性问题(我不关心那个),不如说是把事情做好,而不是必须在十个不同的地方做 trial-and-error 来添加额外的 parens说完一切后,看看事情是否有效。

是否有更好的方法来更好地处理 parens,例如良好的 IDE 或网络环境或 what-not,或者答案只是“习惯”对它”。 ?

通常的非IDE Lisp 对此的回答是缩进

你让它引导你阅读代码。您相信括号是平衡的以遵循您看到的代码的缩进结构。

在写作时,您通常会在脑海中跟踪局部发生的事情,并且当您关闭 paren 时,您知道它结束于哪个表达式。

保持这些表达简短,每一个新的在新行上开始在相同语义级别的前一个下,缩进到相同的缩进级别(彩虹色对我个人来说没有丝毫帮助,更多喜欢分散注意力和混淆)。

例如,您的代码根据这些准则正确格式化后,会变成

(define (fib n)
  (if (= n 0)
      0
      (if (= n 1)
          1
          (+ (fib (- n 1)) 
             (fib (- n 2)))))

我们可以在不注意括号的情况下阅读。

易读性 是编写代码的重点,不是吗?