【问题标题】:0 is not a function in Scheme0 不是 Scheme 中的函数
【发布时间】:2019-05-24 07:33:18
【问题描述】:

当我尝试将 sum-of-prefixes 函数应用于数字列表时,出现错误 '0 is not a function:

(define sum-of-prefixes
  (lambda (lat)
    (cond
     ((null? lat) '())
     ((null? (cdr lat)) (car lat))
     (else
      (sum-of-prefixes-b 0 lat '())))))

(define sum-of-prefixes-b
  (lambda (sum lat result)
    (cond
     ((null? lat) result)
     (else
      (sum-of-prefixes-b (+ sum (car lat)) (cdr lat) (cons (sum result)))))))

我见过this question,看起来很相似,但我在我的代码中看不到表达式可能被简化为 (0)。

您可以尝试在这里评估它: https://repl.it/repls/GlamorousProbableBlocks

(sum-of-prefixes '(1 2 4)) 错误:0 不是函数 [前缀总和,前缀总和-b,(匿名)]

【问题讨论】:

    标签: functional-programming scheme higher-order-functions


    【解决方案1】:

    错误在sum-of-prefixes-b 的最后一行。应该是:

    (sum-of-prefixes-b (+ sum (car lat)) (cdr lat) (cons sum result))))))
    

    代替:

    (sum-of-prefixes-b (+ sum (car lat)) (cdr lat) (cons (sum result)))))))
    

    (sum result) 被解释为将sum 应用于result,但sum 不是函数,是具有值0 的变量。

    如果您希望前缀的总和与列表的顺序相同,也许您应该在((null? lat) (reverse result)) 中更改((null? lat) result),假设我正确推断了函数的含义。在这种情况下,我认为您还应该更改第一个函数的条件的第二个分支。

    【讨论】:

      猜你喜欢
      • 2023-02-01
      • 2023-03-25
      • 2015-12-10
      • 1970-01-01
      • 1970-01-01
      • 2011-03-08
      • 1970-01-01
      • 2013-10-26
      • 1970-01-01
      相关资源
      最近更新 更多