【问题标题】:Scheme - Passing too much arguments into a function doesn't cause error?方案 - 将太多参数传递给函数不会导致错误?
【发布时间】:2013-01-10 05:18:36
【问题描述】:

给定以下代码:

(define (g x y) (* x y)) 

(define (f x y z)
   (define (h x y)(g (+ x y) x z))h)

请注意,我将 3 参数传递给 g ,其中 g 仅接受 2

但是,解释器没有显示错误消息,为什么?

问候

【问题讨论】:

  • 当您实际上没有调用任何参数数量错误的东西时,预计不会出现错误消息。
  • @AntonKovalenko:但我确实调用了g,我使用3 参数调用它...
  • 然后显示您调用g的代码。在您当前的代码中,您定义了一些如果有机会调用g
  • @AntonKovalenko:啊哈!明白了,只有当我用3 参数实际调用g 时,我才会得到预期的错误! +1!谢谢:)

标签: function functional-programming scheme


【解决方案1】:

你实际上并没有在这里调用 h,只是返回它。正确格式化您的代码应如下所示:

(define (f x y z)
    (define (h x y)
        (g (+ x y) x z))
    h)

因此,当您调用 (f 1 2 3) 时,您会返回 h。如果你打电话

((f 1 2 3) 1 2)

那么解释器就会报错。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    相关资源
    最近更新 更多