我还在努力提高我的口吃阅读速度。因此,我的第一个倾向是尝试命名一切(通常是在让绑定),以弥补我的缓慢理解。在网上的例子中,总是有一些东西是绑定的,而另一些东西只是在适当的地方使用。
就像这个愚蠢的s-表达式要解析(1,2,4+ 4)一样,可以用let绑定来编写:
(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))))或不包括:
(reduce (nth args (- (count args) 2))
(conj (take (- (count args) 2) args)
(last args)))))一方面,给“概念”起好的域名是我在使用c风格语言时非常相信的事情,尽管let的范围是非常严格的,但是绑定状态仍然是非常反功能的。何时使用绑定的标准是什么?
发布于 2013-01-12 14:54:33
给东西起名字就行了。它有助于使事情自我记录。这并没有什么问题。如果事情太明显,有时人们可能会想摆脱它:
(let ((number1 12)
(number2 30))
(+ number1 number2))上面并没有给表达式(+ 12 30)添加太多内容。但是,如果您想记录域值,那么
(let ((number1 12) ; border width
(number2 30)) ; table width
(+ number1 number2))最好写
(let ((table-width 30)
(border-width 12))
(+ table-width border-width)) 还有一个问题是:当您有数据结构时,您希望以某种方式使用数据结构的各个部分,并且希望给这些部件临时命名--如何做到这一点?
在您的示例中,LET引入名称,并提供手写代码来提取值。
轻浮的“更好”可以是一种描述性更强的方法:
(match-let (*args1 function arg2) ; a pattern
expression ; a data structure
(reduce function (append args1 (list arg2)))) ; a body如果您必须经常在代码中处理这样的模式,上面这样的内容将是有意义的。这将使代码更具有声明性。
https://stackoverflow.com/questions/14294198
复制相似问题