【问题标题】:(scheme) can define a function but can't call it(scheme) 可以定义一个函数但不能调用它
【发布时间】:2014-04-16 02:40:12
【问题描述】:

我正在尝试编写一个在列表中调用映射函数 N 次的函数。这是一个非常简单的问题:

(define (mapNtimes f x L)
  (if (= x 0)
        L
        (mapNtimes (f (- x 1) map (f L)))))

当我尝试调用我的函数时,Racket 博士给了我以下错误。使用这样的语句:

(mapNtimes ((lambda (x) (* 2 x))) 2 '(1 2 3))

它给了我这个错误

    expected: number?
    given: '(3 5 1)
    argument position: 2nd
    other arguments...:
    2

我知道它与语法有关,但我终其一生都无法弄清楚它是什么。将不胜感激一些帮助。

【问题讨论】:

    标签: scheme racket


    【解决方案1】:

    也许您是 Scheme 新手,不熟悉调用 Scheme 函数的语法。

    给定一个函数f,您可以使用以下方法调用它:

    (f arg1 arg2)
    

    不是

    f (arg1 arg2)
    

    这对我有用。

    (define (mapNtimes f x L)
      (if (= x 0) L
        (mapNtimes f (- x 1) (map f L))))
    

    【讨论】:

    • 看来OP不熟悉scheme中函数调用的语法,能否请您提一下<func>(a b c)不是函数调用,但(<func> a b c)是?
    • @AlexejMagura 好建议。谢谢。
    • 非常感谢,几周前我刚开始学习计划的课程。我现在看到我在递归上传递的东西与我想象的完全不同。不太清楚它是如何让我定义的。无论如何,更正后的版本效果很好。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    • 2015-06-06
    • 1970-01-01
    • 2014-12-07
    • 1970-01-01
    相关资源
    最近更新 更多