在方案中匹配 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)))))
我们可以在不注意括号的情况下阅读。
易读性 是编写代码的重点,不是吗?
我正在尝试在方案中编写一些代码。这是执行斐波那契的示例:
(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)))))
我们可以在不注意括号的情况下阅读。
易读性 是编写代码的重点,不是吗?