当我运行以下代码时,我遇到了一个错误: 错误:#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
答案 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)))))
我已经使用虚拟程序对其进行了测试,它似乎有效。希望它有所帮助。