错误:#的参数数量错误

时间:2012-07-12 00:03:31

标签: scheme

当我运行以下代码时,我遇到了一个错误:     错误:#cartesian(x)的参数数目错误

;;;;功能定义

(define (eps-func p)
   (let* ((p (lattice->cartesian))
         (x (vector3-x p))
         (y (vector3-y p))
         (z (vector3-z p)))
        (if (> sin(* 2 pi x y z) 0)
            (make dielectric
                    (epsilon 12))
            (make dielectric
                    (epsilon 1)))))

;;;;函数调用

(set! default-material (make material-function (material-func eps-func)))

我无法弄清楚哪里出错了。上面的代码只是控制文件的一部分。

一些背景资料如下:

(lattice->cartesian x)

其中x是vector3

vector3是在某处定义的数据类型

3矢量函数

(vector3 x y z)

使用给定的组件创建一个新的3向量。

(vector3-x v)
(vector3-y v)
(vector3-z v)

返回向量v。

的相应组件

material-func [function] 一个参数的函数,位置vector3

2 个答案:

答案 0 :(得分:0)

也许您应该使用参数调用(lattice->cartesian))?或者此函数返回lambda?

答案 1 :(得分:0)

对我而言,这里看起来有两个错误。首先关闭@flamingo已经提到了,但为了清楚起见我重命名了let-bound变量,使它与参数不同。另外,我在罪恶周围添加了缺失的括号。

(define (eps-func p)
   (let* ((tmp (lattice->cartesian p))
         (x (vector3-x tmp))
         (y (vector3-y tmp))
         (z (vector3-z tmp)))
        (if (> (sin (* 2 pi x y z)) 0)
            (make dielectric (epsilon 12))
            (make dielectric (epsilon 1)))))

我已经使用虚拟程序对其进行了测试,它似乎有效。希望它有所帮助。