如何有效地读写Lisp代码?

 asfasfdsfd 发布于 2023-01-12 17:21

我目前正在学习Lisp,我认为我掌握了基础知识(我使用的是优秀的Land of Lisp,到目前为止我已阅读并完成了大约四分之一的工作).

我尝试根据我已经学到的东西创建自己的Lisp程序.不知何故,它的工作原理.但这只是某种方式.到目前为止,我一直在开发主要使用C语法的语言,例如C#和JavaScript(请注意,我完全清楚JavaScript不是基于C语言).

不过,我习惯用C语法"思考",当我用C#或JavaScript编写代码时,我可以用一种非常直接的方式写下来.相比之下,在编写Lisp代码时,我很难将所有这些括号包围起来.

如果我有一个简单的陈述,如

(setf x (+ 2 3))

我总是发现自己试图从左到右阅读它,发现它不起作用,然后搜索最里面的一对括号,然后从里到外进行处理.对于这个简单的表达式,这非常快.

但是如果我有更复杂的代码(虽然它根本不复杂),比如一个使用的函数,let更难(至少对我来说)找到最里面的括号:

(defun foo ()
  (let ((x 23)
        (y 42))
  (+ x y)))

在这里,看到什么后发生了什么,以及什么是嵌套到什么,已经有点难了.现在添加一些cond东西,也许结合几个lambdas,我完全迷失了,并发现自己计算括号几分钟(字面意思).

在编写它时也是如此,我在括号中迷失了,我不认为我甚至看到了"复杂"的Lisp代码.

随着时间的推移,这会变好吗?即,你习惯了吗?或者,有没有关于如何处理读取和编写Lisp代码以使事情变得更容易的技巧?经验丰富的Lisp程序员如何做到这一点?任何提示?

1 个回答
  • 你需要正确地缩进它.你的例子不是.

    (defun foo ()
      (let ((x 23)
            (y 42))
      (+ x y)))
    

    这里:

    (defun foo ()
      (let ((x 23)
            (y 42))
        (+ x y)))
    

    最后一个表达式需要向右移动.然后你可以看到它在LET里面.

    Lisp有一些结构模式.不是很多.一旦你学习和训练这些,阅读Lisp相对容易.比没有更多人阅读的中文学习要困难得多.

    一些模式:

    (symbol ...)
    

    符号给出锚点

    ((a 10) (b 20))
    

    绑定列表,例如在 LET

    (with-foo (foo :option1 1 :option2 2)
      (body))
    

    宏喜欢WITH-OPEN-FILE.

    然后是复杂的函数arglist本身.位置参数,可选参数,关键字参数.&rest&aux.

    还有一些,但不是太多.一旦学会了基本的宏和特殊表单模式,代码阅读就变得容易了.

    如何改善?阅读代码.培养.这并不难.有点像骑自行车.第一天似乎很难,然后它是自动化的.

    写作.

    要编写代码,您需要一个可以缩进的编辑器.大多数只能缩进行,但不能格式化整个表达式.因此,您需要进行格式化.有一些基本规则.Lisp有一台漂亮的打印机,可以格式化.但是这通常在编辑器中不可用,并且它不知道评论之类的东西.

    当我编写一段Lisp代码时,我通常也花费一些时间来正确布局代码.

    线太长了?

    晃来晃去的括号?

    结构正确吗?

    路线?

    足够的视觉线索?

    命名?

    评论?

    文档?

    2023-01-12 17:23 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有