gpt4 book ai didi

emacs - pretty-print 和扩展

转载 作者:行者123 更新时间:2023-12-05 01:28:29 26 4
gpt4 key购买 nike

编辑 我不只是问“缩进”每一行代码,还问“ pretty-print ”和/或更广泛的“缩进”定义,其中行将根据它们包含的内容进行分组/拆分。

这是一个函数(我编写它是为了解决欧拉问题,但这不是重点:我可以用不同的方式编写它)我正在尝试漂亮地打印:

手动缩进的版本:

(apply max
(flatten
(for [x (range 100 1000)]
(map
#(if (= (str (* x %)) (apply str (reverse (str (* x %)))))
(* x %)
0)
(range x 1000)))))

显然这不是真正的 Lisp 缩进/打印风格,因为我想从一开始就养成良好的习惯,我尝试“漂亮地打印”它,从 Emacs 的 slime-repl clojure REPL 中执行以下操作:
user> (doc pprint)      ;; just to show which version of pprint I'm using
clojure.pprint/pprint
...

所以我尝试这样做:
user> (pprint '(apply max
(flatten
(for [x (range 100 1000)]
(map
#(if (= (str (* x %)) (apply str (reverse (str (* x %)))))
(* x %)
0)
(range x 1000))))))

我得到了以下信息:
(apply
max
(flatten
(for
[x (range 100 1000)]
(map
(fn*
[p1__13958#]
(if
(=
(str (* x p1__13958#))
(apply str (reverse (str (* x p1__13958#)))))
(* x p1__13958#)
0))
(range x 1000)))))

据我了解,lambda 的 #(...) 表示法是“读者宏”。那么如何在不触发宏扩展的情况下进行 pretty-print 呢?更一般地说:我如何才能漂亮地打印“我在文本编辑器中看到的内容”?

另外,几乎所有的东西都换一条线是正常的吗?例如:
(apply
max
(flatten
(for
[x (range 100 1000)]
(map
...

似乎浪费了相当多的垂直屏幕空间。这是 Lisp 代码应该缩进的方式吗?

还有最后一个相关问题:Emacs 可以配置为“漂亮地打印”选定区域或整个 .clj 缓冲区吗?

最佳答案

没有“官方”缩进 lisp 代码的方式,但我喜欢 clojure-mode 缩进 clojure 代码的方式(见下文)。

我不知道为什么 pprint 会按照它的方式打印代码,但根据 this页面,它是一个早期版本,尚未完成功能。

对于 emacs 缩进部分,您可能需要查看 clojure-mode .

关于emacs - pretty-print 和扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10411934/

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