如何调用此地图功能

时间:2016-06-10 13:39:33

标签: scheme

我在一本书上看到了一个关于如何在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)))

我该如何调用此功能?

2 个答案:

答案 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 ...))