作为参数传递的对象不是环境

时间:2015-10-30 09:14:22

标签: list scheme lisp

我正在使用MIT方案解释器学习方案。我正在研究向量的不同表示,并希望编写一个采用组件列表的通用向量函数,然后返回一个函数,该函数根据参数将返回标记数据或组件列表。

我的代码如下:

(define (vec li)
  (lambda (x)
    (cond ((= x 0) (cons 'vector 
                         (cnt li)))
          ((= x 1) li)))
  (define (cnt li cn)
    (cond ((eq? li '()) cn)
          (else (cnt (cdr li) 
                     (+ cn 1)))))

内部函数(cnt li cn)计算列表中的项目数,并在达到'()时返回计数。 然后返回的函数允许使用arg 0或带有arg 1的组件列表访问标签数据

当我尝试用(vec '(1 0 0))应用函数时,我得到“对象(1 0 0),作为参数传递给vec,不是一个环境”我不明白什么是一个参数是一个环境意味着我不能以这种方式通过名单

1 个答案:

答案 0 :(得分:2)

几个问题:

你错过了一个结束括号(可能是c / p错误)

您可以定义cnt以获取2个参数,

(define (cnt li cn)
  (cond ((eq? li '()) cn)
       (else (cnt (cdr li) 
                  (+ cn 1)))))

但是当你在main函数中调用它时,你只能用1参数调用它。

(cnt li)