我在一本书上看到了一个关于如何在Scheme中创建一个map函数的代码,代码如下:
(define map (lambda (f L)
(if null? L '()
(cons (f (car L)) (map f (cdr L))))))
(define square (lambda (x)
(* x x)))
(define square-list (lambda (L)
(map square L)))
据说我可以用:
来打电话(map square-list '(1 2 3 4))
但它给我带来了以下错误:
SchemeError: too many operands in form: (null? L (quote ()) (cons (f (car L)) (map f (cdr L))))
Current Eval Stack:
-------------------------
0: (map square-list (quote (1 2 3 4)))
我该如何调用此功能?
答案 0 :(得分:3)
您有两个错误。首先,您忘记用括号括起null?
支票(注意更好的方法来缩进代码):
(define map
(lambda (f L)
(if (null? L)
'()
(cons (f (car L))
(map f (cdr L))))))
其次,您需要调用此过程:
(square-list '(1 2 3 4 5))
=> '(1 4 9 16 25)
答案 1 :(得分:0)
您在null? L
附近遗失了一些问题,即您的状况可能看起来像
(if (null? L) '()
(cons ...))