Clojure方案
我有一个Scheme函数,它具有以下属性: 它计算嵌套列表结构中的叶节点数,忽略#f。它使用递归过程:Clojure方案,clojure,scheme,Clojure,Scheme,我有一个Scheme函数,它具有以下属性: 它计算嵌套列表结构中的叶节点数,忽略#f。它使用递归过程: 如果输入为空列表,则这是返回0的基本情况 如果输入是一对车辆不是列表的车辆: 如果汽车是#f,我们在cdr上递归并返回它 否则,我们将汽车计数为1,并将其添加到cdr上的递归结果中 最后,我们在car和cdr上递归,并将它们添加到一起 如何将以下代码转换为编程语言Clojure (define (x lis) (cond ((null? lis) 0) ((not
- 如果输入为空列表,则这是返回0的基本情况
- 如果输入是一对车辆不是列表的车辆:
- 如果汽车是#f,我们在cdr上递归并返回它
- 否则,我们将汽车计数为1,并将其添加到cdr上的递归结果中
- 最后,我们在car和cdr上递归,并将它们添加到一起
(define (x lis)
(cond ((null? lis) 0)
((not (list? (car lis)))
(cond
((eq? (car lis) #f) (x (cdr lis)))
(else (+ 1 (x (cdr lis))))))
(else (+ (x (car lis)) (x (cdr lis))))))
透明的翻译是
(defn x [lis]
(cond (empty? lis) 0
(not (coll? (first lis)))
(if (= (first lis) false)
(x (rest lis))
(inc (x (rest lis))))
:else (+ (x (first lis)) (x (rest lis)))))
或者你问过clojure的具体解决方案吗
已编辑(clojure特定解决方案第1版)。
(defn x [lis]
(count (filter (partial not= false) (flatten lis))))
如果将列表展平,clojure版本可能会产生意外结果。如果#f(或者代码中的false)在列表中,并且不一定在列表的前面(就像OP希望的那样),那么它将返回不正确的结果。如果可以的话,为了将来的观众,请添加一个包含一些映射函数的递归解决方案。请举例说明嵌套列表结构的问题。