首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >清洁Lisp可读性

问清洁Lisp可读性
EN

Stack Overflow用户
提问于 2013-01-12 14:20:14
回答 1查看 464关注 0票数 0

我还在努力提高我的口吃阅读速度。因此,我的第一个倾向是尝试命名一切(通常是在让绑定),以弥补我的缓慢理解。在网上的例子中,总是有一些东西是绑定的,而另一些东西只是在适当的地方使用。

就像这个愚蠢的s-表达式要解析(1,2,4+ 4)一样,可以用let绑定来编写:

代码语言:javascript
复制
 (let [first-nums  (take (- (count args) 2) args)
       last-num (last args)
       fun (nth args (- (count args) 2))]
    (reduce fun (conj first-nums last-num))))

或不包括:

代码语言:javascript
复制
  (reduce (nth args (- (count args) 2))
          (conj (take (- (count args) 2) args)
                (last args)))))

一方面,给“概念”起好的域名是我在使用c风格语言时非常相信的事情,尽管let的范围是非常严格的,但是绑定状态仍然是非常反功能的。何时使用绑定的标准是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-12 14:54:33

给东西起名字就行了。它有助于使事情自我记录。这并没有什么问题。如果事情太明显,有时人们可能会想摆脱它:

代码语言:javascript
复制
(let ((number1 12)
      (number2 30))
  (+ number1 number2))

上面并没有给表达式(+ 12 30)添加太多内容。但是,如果您想记录域值,那么

代码语言:javascript
复制
(let ((number1 12)        ; border width
      (number2 30))       ; table width
  (+ number1 number2))

最好写

代码语言:javascript
复制
(let ((table-width 30)
      (border-width 12))
   (+ table-width border-width))     

还有一个问题是:当您有数据结构时,您希望以某种方式使用数据结构的各个部分,并且希望给这些部件临时命名--如何做到这一点?

在您的示例中,LET引入名称,并提供手写代码来提取值。

轻浮的“更好”可以是一种描述性更强的方法:

代码语言:javascript
复制
(match-let (*args1 function arg2)                  ; a pattern
      expression                                   ; a data structure
   (reduce function (append args1 (list arg2))))   ; a body

如果您必须经常在代码中处理这样的模式,上面这样的内容将是有意义的。这将使代码更具有声明性。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14294198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档