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

The object ... passed as an argument is not an environment

我正在使用 MIT 方案解释​​器学习方案。我正在处理向量的不同表示,并想编写一个通用向量函数,它接受一个组件列表,然后 returns 一个函数,该函数根据参数将 return 标签数据或组件列表.

我的代码如下:

(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) 计算列表中的项目数,return 计算达到 '() 时的计数。 然后函数 returned 允许访问带有 arg 0 的标签数据或带有 arg 1

的组件列表

当我尝试使用 (vec '(1 0 0)) 应用该函数时,我得到 "the object (1 0 0), passed as an argument to vec, is not an environment" 我不明白作为环境的参数是什么意思,也不明白为什么我不能以这种方式传递列表

几个问题:

您缺少右括号(可能 c/p 错误)

你定义cnt接受2个参数,

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

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

(cnt li)