【问题标题】:Scheme Sum with entered number and term带有输入数字和期限的方案总和
【发布时间】:2014-12-14 19:16:49
【问题描述】:

我的第一个问题:D

我想写一个函数,根据输入的数字和术语给我一个总和。

我现在有这个:

(define series  (lambda (n a-term)
             (if (= n 0)
                 0
             (+ a-term (series (- n 1) a-term)))))

我想输入一个自然数n(0 到n 的总和),我想输入一个a-term

例如(+ n 1)(sqr(n))a-term 基本上说明了如何计算总和。

我收到一条错误消息,提示 +: expects a number as 1st argument, given (lambda (a1) ...) 所以基本上它在这里期望一个术语:(+ a-term (series (- n 1) a-term))))) 是一个数字,但为什么它不是一个数字?我的意思是,如果我为 n 输入一个数字,为​​什么它不为一个术语返回一个数字?

一个有效的调用将是 (series 10 (lambda (n) (sqr(n)))) 。结果应该是不超过 10 (385) 的所有平方数之和。

另一个例子是(series 100 (lambda (n) n))。 结果将是 5050 = 从 0 到 100 的所有数字的总和

我希望你能理解我的问题,并为我的英语不好感到抱歉

【问题讨论】:

  • 你能举一个例子说明你如何用一些参数调用series 以及预期的结果是什么?
  • 当然!在上述问题中编辑了一个示例

标签: lambda sum scheme


【解决方案1】:

要以n 作为参数调用过程aterm,您需要将其表示为(aterm n)

(define series  
  (lambda (n a-term)
    (if (= n 0)
        0
        (+ (a-term n) (series (- n 1) a-term)))))

然后

> (series 10 (lambda (n) (sqr n)))
385

或者,更短

> (series 10 sqr)
385

【讨论】:

    猜你喜欢
    • 2019-05-04
    • 2021-09-16
    • 2023-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多