Scheme 错误:对#<;的参数数目错误;程序

Scheme 错误:对#<;的参数数目错误;程序,scheme,Scheme,运行以下代码时,我遇到了一个错误: 错误:笛卡尔(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 dielec

运行以下代码时,我遇到了一个错误: 错误:笛卡尔(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是向量3

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

3-向量函数

(vector3 x y z)
使用给定组件创建一个新的3矢量

(vector3-x v)
(vector3-y v)
(vector3-z v)
返回向量v的相应分量

材料功能[功能]
一个参数的函数,位置向量3

也许你应该用参数调用
(晶格->笛卡尔))
?或者这个函数返回lambda?

对于我来说,这里似乎有两个错误。First off@flamingo已经提到了,但为了清楚起见,我重命名了let-bound变量,使其与参数不同。此外,我在sin周围添加了缺少的括号

(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)))))

我已经用虚拟程序测试了它,它似乎是有效的。希望能有所帮助。

伙计们,为什么投反对票,没有任何评论?我从Scheme邮件列表中得到了一些回复。正如flamingo所说,函数调用lattice->cartesian应该有一个参数,其内容如下所示。(定义(eps-func-p)(let*((p(晶格->笛卡尔p))