Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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
List Scheme函数对列表中的原子元素进行计数_List_Recursion_Scheme - Fatal编程技术网

List Scheme函数对列表中的原子元素进行计数

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))))

我正在尝试用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))))
    (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?
,具体取决于解释器中可用的解释器)。如果值是列表,则这比测试便宜