使用Python的漂亮打印Lisp
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用Python的漂亮打印Lisp,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1903字,纯文字阅读大概需要3分钟。
内容图文
![使用Python的漂亮打印Lisp](/upload/InfoBanner/zyjiaocheng/773/0fbe17e54d4742ad92e2e6cd4c0c8dbd.jpg)
有没有办法在Python中漂亮地打印Lisp风格的代码字符串(换句话说,一堆平衡的括号和文本)而无需重新发明轮子?
解决方法:
简短的回答
我认为合理的方法是,如果可以的话,是生成Python列表或自定义对象而不是字符串,并使用pprint模块,如@saulspatz所建议的那样.
答案很长
整个问题看起来像是XY-problem的一个例子.为什么?因为你使用Python(为什么不是Lisp?)来操作表示生成的Lisp风格代码的字符串(为什么不是数据结构?),其中Lisp风格被定义为“一堆括号和文本”.
对于“如何漂亮印刷?”的问题,我将回复“I wouldn’t start from here!”.
除了使用现有的车轮之外,不用重新发明车轮的最佳方法是坚持简单的输出格式.
但首先,为什么你需要漂亮的印刷?谁会看看结果代码?
根据您使用的确切Lisp方言和代码的预期用法,您可以非常不同地格式化代码.例如,考虑文本的换行符,缩进和最大宽度. Common Lisp pretty-printer特别发展,我怀疑你想要具有相同级别的可配置性.
如果您使用Lisp,对pprint的简单调用可以解决您的问题,但您使用的是Python,因此暂时坚持使用最合理的输出,因为漂亮的打印是一种蠕虫.
如果您的代码适用于人类读者,请:
>不要在自己的行上放置右括号
>不要垂直对齐打开和关闭括号
>不要在左括号之间添加空格
这很难看:
( * ( + 3 x )
(f
x
y
)
)
这个更好:
(* (+ 3 x)
(f x y))
或者干脆:
(* (+ 3 x) (f x y))
See here了解更多详情.
但在打印之前,您必须解析输入字符串并确保其格式正确.由于你如何生成表单,也许你确定它是格式良好的,但我认为打印机应该忽略它而不是做太多的假设.如果你通过漂亮的打印机传递一个由Python对象代表的AST而不仅仅是字符串,这将更容易,如评论中所建议的那样.您可以构建数据结构或自定义类并使用pprint(python)模块.如上所述,如果您可以更改生成Lisp样式代码的方式,那么这似乎是您的理由.
对于字符串,您应该处理任何可能的输入并拒绝无效的输入.
这意味着检查括号和引号是否平衡(小心转义字符)等.
实际上,您不需要真正构建用于打印的中间树(尽管它可能对程序的其他部分有帮助),因为Lisp样式的代码由易于嵌套的表单组成,并使用前缀表示法:您可以从左到右扫描输入字符串,并在看到括号时打印(打开括号:递归;关闭括号,从递归返回).当你第一次遇到一个未转义的双引号“,读到下一个”,…
这与简单的印刷方法相结合,可满足您的需求.
内容总结
以上是互联网集市为您收集整理的使用Python的漂亮打印Lisp全部内容,希望文章能够帮你解决使用Python的漂亮打印Lisp所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。