Common Lisp代码格式咨询:heapify-down函数缩进是否合规?
Common Lisp heapify-down 代码格式化规范修正
你的代码在缩进、括号对齐和语法细节上存在一些不符合Common Lisp通用规范的问题,以下是修正后的规范版本,同时说明关键格式化要点:
规范格式化后的代码
(defun heapify-down (heap-id index) (if (is-leaf heap-id index) nil (let ((left (left-child index)) (right (right-child index)) (heap-array (heap-actual-heap heap-id))) (cond ((null (aref heap-array left)) (when (= (find-largest heap-id index right) index) (swap heap-array index right)) nil) ((null (aref heap-array right)) (when (= (find-largest heap-id index left) index) (swap heap-array index left)) nil) ((and (= (find-largest heap-id index left) left) (= (find-largest heap-id index right) right)) nil) (t (let ((new-index (find-smallest heap-id left right))) (swap heap-array index new-index) (heapify-down heap-id new-index)))))))
关键修正与格式化要点
- 参数对齐:函数参数直接跟在
defun的括号后,无需换行;若参数过多需换行,应对齐到defun的左括号位置,保持视觉统一。 - 特殊形式缩进:
if、let、cond等特殊形式的子句统一缩进4个空格(或2个,项目内保持一致),子句的起始位置对齐,增强可读性。 - 括号闭合:每个嵌套结构的右括号对齐到对应特殊形式的起始位置(比如
let的右括号对齐到let的首字母),这是Common Lisp社区广泛遵循的风格。 - 语法修正:原代码中
(let (new-index ...))缺少一层括号,正确的let变量绑定格式应为(let ((var value) ...)),否则会引发语法错误。 - 可读性优化:将
if替换为when(当只有真分支时),减少冗余的nil;函数调用的参数尽量紧凑,避免不必要的换行,同时保持逻辑块的清晰分隔。
内容的提问来源于stack exchange,提问作者Matias Bonoli
相关产品推荐
相关产品推荐

