理解clojure中的浅反转?
我试图学习clojure,我遇到了这段代码。有人能解释到底发生了什么吗?前面有星星的线条是我需要帮助理解的。谢谢理解clojure中的浅反转?,clojure,reverse,Clojure,Reverse,我试图学习clojure,我遇到了这段代码。有人能解释到底发生了什么吗?前面有星星的线条是我需要帮助理解的。谢谢 (defn shallow-reverse "Reverses the top level elements of lst" *([lst] (shallow-reverse () lst)) *([reversed lst] (cond (empty? lst) reversed :else (recur (cons (fir
(defn shallow-reverse
"Reverses the top level elements of lst"
*([lst]
(shallow-reverse () lst))
*([reversed lst]
(cond
(empty? lst) reversed
:else (recur (cons (first lst) reversed) (rest lst)))))
该语法定义了一个具有两种不同实现的函数
浅反
,由不同的参数列表分隔,或。在这种情况下,第一个版本调用提供默认参数值的第二个版本。第二个实现在自身上执行递归循环,从lst
中获取第一个元素,并将其添加到反向的前面,并在lst
中没有更多元素时结束
调用是一种优化,它调用当前函数(如果存在),而不使用额外的堆栈帧
在其他语言中,可以使用相同的名称定义两个单独的函数
//Note: Pseudo code, not valid Java
public List<int> shallowReverse(List<int> lst) {
return shallowReverse(new List<int>(), lst);
}
public List<int> shallowReverse(List<int> reversed, List<int> lst) {
if(lst.size() < 1) return reversed;
return shallowReverse(...);
}
//注意:伪代码,不是有效的Java
公共列表浅层(列表lst){
返回shallwreverse(新列表(),lst);
}
公共列表反向(列表反向,列表lst){
如果(lst.size()<1)返回反向;
返回较浅的(…);
}
有关更多信息,请参阅上的文档。语法定义了一个函数浅反
,它有两种不同的实现,由不同的参数列表分隔,或。在这种情况下,第一个版本调用提供默认参数值的第二个版本。第二个实现在自身上执行递归循环,从lst
中获取第一个元素,并将其添加到反向的前面,并在lst
中没有更多元素时结束
调用是一种优化,它调用当前函数(如果存在),而不使用额外的堆栈帧
在其他语言中,可以使用相同的名称定义两个单独的函数
//Note: Pseudo code, not valid Java
public List<int> shallowReverse(List<int> lst) {
return shallowReverse(new List<int>(), lst);
}
public List<int> shallowReverse(List<int> reversed, List<int> lst) {
if(lst.size() < 1) return reversed;
return shallowReverse(...);
}
//注意:伪代码,不是有效的Java
公共列表浅层(列表lst){
返回shallwreverse(新列表(),lst);
}
公共列表反向(列表反向,列表lst){
如果(lst.size()<1)返回反向;
返回较浅的(…);
}
有关更多信息,请查看上的文档。cons
列表中的一个元素位于前面<代码>第一个
将滤芯从前部取下
你可以把代码中发生的事情想象成有两堆盘子——一堆开始是空的。你从一个上面取下来,把它放在另一个上面。你重复,直到只有一堆。现在,位于顶部的元素现在位于底部,反之亦然,顺序颠倒。cons
列表中的元素位于前面<代码>第一个
将滤芯从前部取下
你可以把代码中发生的事情想象成有两堆盘子——一堆开始是空的。你从一个上面取下来,把它放在另一个上面。你重复,直到只有一堆。现在,位于顶部的元素现在位于底部,反之亦然,顺序颠倒