【问题标题】:ERROR: Wrong number of arguments to #<procedure错误:#<procedure 的参数数量错误
【发布时间】:2012-07-12 00:03:30
【问题描述】:

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

【问题讨论】:

  • 为什么投反对票,没有任何 cmets,伙计们?

标签: scheme


【解决方案1】:

也许你应该用参数调用(lattice-&gt;cartesian))?还是这个函数返回 lambda?

【讨论】:

  • 我收到了来自 Scheme 邮件列表的一些回复。就像火烈鸟说的那样,函数调用lattice->cartesian应该有一个参数,它的读法如下。 (define (eps-func p) (let* ((p (lattice->cartesian p)))
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-24
    • 2015-06-21
    相关资源
    最近更新 更多