1
我正試圖在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)))
將引發錯誤四號線:
(list? (car X) (+ (num_items(car X)) (num_items(cdr X))))
據我所知道的,(num_items(car X))
遞歸的除了似乎導致錯誤。如果我有一個1
替換線的一部分,例如獲得:
(list? (car X) (+ 1 (num_items(cdr X))))
然後代碼編譯和運行,但隨後它並沒有解決問題。
我正在使用Compile Online來測試/運行我的代碼。它拋出的錯誤是:
$gosh main.scheme
gosh: "error": pair required, but got a