gpt4 book ai didi

coding-style - 此 Clojure 代码缩进正确吗?

转载 作者:太空宇宙 更新时间:2023-11-03 18:41:25 25 4
gpt4 key购买 nike

http://pastebin.com/d2294a374

我在那里发布了以两种不同方式缩进的代码。我在这里感到困惑,因为我不确定当一个函数有多个参数时该怎么做。每个参数应该在不同的行上还是在同一行?此外,当我们有类似 (def xyz (fn abc [a1 a2] ... does (fn abc ... go in a different line?

我正在阅读来自 http://mumble.net/~campbell/scheme/style.txt 的以下内容,但对我来说似乎没有多大意义。

** 缩进和对齐

任何形式的运算符,即开场后的第一个子形式圆括号,确定缩进或对齐的规则剩余的表格。这个位置的很多名字表示特殊对齐或缩进规则;这些是特殊运算符、宏或具有特定参数结构的过程。

但是,如果第一个子表单是非特殊名称,那么如果第二个子表单子窗体在同一行,对齐后面所有的起始列与第二个子窗体的子窗体。如果第二个子表单打开下一行,将其起始列与第一行对齐子表单,并对所有剩余的子表单执行相同的操作。

一般来说,Emacs 会正确地缩进 Lisp 代码。运行“C-M-q”(indent-sexp) 在任何代码上以确保它被正确缩进,并且配置 Emacs 以便缩进任何非标准形式适本地。

Not Acceptable :

(+ (sqrt -1)
(* x y)
(+ p q))

(+
(sqrt -1)
(* x y)
(+ p q))

可接受:

(+ (sqrt -1)
(* x y)
(+ p q))

(+
(sqrt -1)
(* x y)
(+ p q))

基本原理:柱状对齐允许读者遵循 任何操作的操作数直接,简单地通过扫描 向下或向上以匹配公共(public)列。缩进决定 结构;令人困惑的缩进对希望阅读的读者来说是一种负担 无需手动匹配括号即可推导结构。

最佳答案

如果参数在多行上(例如,因为它们不适合在一行中),它​​们都应该有相同的缩进。如果将第一个参数放在新的一行,则该缩进应该比函数本身的缩进更深(例如 2 个空格):

(foo (bar (baz
arg1
arg2)))

如果您将第一个参数与函数放在同一行,则其余参数应具有相同的缩进:

(foo (bar (baz arg1
arg2)))

我会将您的示例缩进如下:

(defn get-neighbors [[x y] v]
(for [y1 (range (dec y) (+ y 2))
x1 (range (dec x) (+ x 2))
:when (and (not (and (= x1 x)
(= y1 y)))
(in-bounds? x1 y1 v))]
((v y1) x1)))

关于coding-style - 此 Clojure 代码缩进正确吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1904774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com