Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
理解clojure中的浅反转?_Clojure_Reverse - Fatal编程技术网

理解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

我试图学习clojure,我遇到了这段代码。有人能解释到底发生了什么吗?前面有星星的线条是我需要帮助理解的。谢谢

(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
列表中的元素位于前面<代码>第一个
将滤芯从前部取下

你可以把代码中发生的事情想象成有两堆盘子——一堆开始是空的。你从一个上面取下来,把它放在另一个上面。你重复,直到只有一堆。现在,位于顶部的元素现在位于底部,反之亦然,顺序颠倒