-2

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

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

三向量函数

(vector3 x y z)

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

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

返回向量 v 的对应分量。

material-func [函数] 一个参数的函数,位置向量3


感谢大家。我还发现这很有效:

aggregate(as.numeric(df$Replicate), list(exptCount=df$expt),max)
4

2 回答 2

0

也许你应该(lattice->cartesian))用参数调用?或者这个函数返回 lambda?

于 2012-07-12T05:27:54.137 回答
0

对我来说,这里似乎有两个错误。首先@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)))))

我已经使用虚拟程序对其进行了测试,它似乎可以工作。希望能帮助到你。

于 2012-08-06T20:24:56.150 回答