List Scheme函数对列表中的原子元素进行计数
我正在尝试用Scheme(LISP)编写一个简单的递归定义 目标是计算列表中原子元素的数量,并递归地计算内部列表原子的数量 例如:List Scheme函数对列表中的原子元素进行计数,list,recursion,scheme,List,Recursion,Scheme,我正在尝试用Scheme(LISP)编写一个简单的递归定义 目标是计算列表中原子元素的数量,并递归地计算内部列表原子的数量 例如: (num_items '((a b) c d)) 应返回: 4 因为“a”、“b”、“c”和“d”是列表/子列表中的四个原子元素 我的代码如下: (define (num_items X) (cond ((null? X) 0) (list? (car X) (+ (num_items(car X)) (num_items(cdr X))))
(num_items '((a b) c d))
应返回:
4
因为“a”
、“b”
、“c”
和“d”
是列表/子列表中的四个原子元素
我的代码如下:
(define (num_items X)
(cond
((null? X) 0)
(list? (car X) (+ (num_items(car X)) (num_items(cdr X))))
(else (+ 1 (num_items(cdr X))))
))
(display(num_items '((a b) c d)))
错误将在第4行抛出:
(list? (car X) (+ (num_items(car X)) (num_items(cdr X))))
据我所知,加法中的(num_items(car X))
递归似乎是导致错误的原因。例如,如果我用1
替换该行的该部分,以获得:
(list? (car X) (+ 1 (num_items(cdr X))))
然后代码编译并运行,但它不能解决问题
我正在使用测试/运行我的代码。它抛出的错误是:
$gosh main.scheme
gosh: "error": pair required, but got a
第四行缺少一对括号,请尝试以下操作:
(define (num_items X)
(cond
((null? X) 0)
((list? (car X)) (+ (num_items (car X)) (num_items (cdr X))))
(else (+ 1 (num_items (cdr X))))))
除此之外,代码还可以。只是一个小建议:不要在单独的一行中关闭括号,请在结尾处全部关闭。另外,请注意,您可以将列表?
替换为对?
(或cons?
,具体取决于解释器中可用的解释器)。如果值是列表,则这比测试便宜