【问题标题】:Implementing a math formula in Scheme (DrRacket)在 Scheme (DrRacket) 中实现数学公式
【发布时间】:2018-05-06 23:16:33
【问题描述】:

首先让我说我在 Scheme/Racket 方面完全是新手。我正在尝试实现以下公式:

      αi = (3/h)((ai+1 – ai) – (ai – ai-1))

这是我定义函数的方式:

(define alpha_values (lambda (y_values h n) (...))

我希望它使用y_values 列表以及一些常量h 和一个数字n 运行该函数,然后计算并返回一个 α列表> 价值观。 n 将从 1 变为 n-1,因此不会迭代列表的第一个和最后一个元素。

例如,如果y_values 的列表是'(2 4 6 8)h1 并且n3 那么应该有两个α 个值返回:一个用于 i=1 (y=4),一个用于 i=2 (y=6),像这样:3*((6-4)-(4-2)) = 03*((8-6)- (6-4)) = 0α 返回'(0 0)

说实话,我什至不知道如何开始实施这一点。我考虑过使用map,但我不知道这样做时是否可以跳过第一个和最后一个元素。我已经尝试使用carcdr 递归地这样做,但是在没有第一个元素的情况下再次递归调用函数时,我遇到了“丢失”计算所需列表中的一个元素的问题。对于如何实现这个公式的一些见解,我将不胜感激——不是答案,只是关于如何让球滚动的想法。

【问题讨论】:

    标签: scheme racket map-function


    【解决方案1】:

    当您不确定如何解决特定问题时,请考虑将其分解为更易于管理、思考和实施的较小任务。

    例如,从最终结果向后追溯,您想要生成一个 alpha 列表,其中每个 alpha 是使用上述公式从 h 和间隔 {a_i-1, a_i, a_i+1} 创建的。

    因此,您可以创建一个小函数,我们称之为 compute-alpha,它以 intervalh 作为参数,然后使用公式生成 alpha。即:

    (define (compute-alpha interval h)
      ...)
    

    这个函数的主体就是公式,它的行为如下:

    > (compute-alpha '(2 4 6) 1)
    0
    > (compute-alpha '(4 6 8) 1)
    0
    

    但随后您意识到您没有间隔(例如'(2 4 6)'(4 6 8) 等)来使用compute-alpha。所以下一步是定义另一个小函数,我们称之为build-intervals,它将y-valuesn 作为参数,并生成一个区间列表。即:

    (define (build-intervals y-values n)
      ...)
    

    并表现如下:

    > (build-intervals '(2 4 6 8) 3)
    '((2 4 6) (4 6 8))
    > (build-intervals '(1 2 3 4 5 6 7) 4)
    '((1 2 3) (2 3 4) (3 4 5))
    

    现在,剩下的就是在build-intervals 生成的每个区间上应用compute-alpha。这就是map 的亮点:

    (define (alpha-values y-values h n)
      (map (lambda (interval)
             (compute-alpha interval h))
           (build-intervals y-values n)))
    

    那么你可以:

    > (alpha-values '(2 4 6 8) 1 3)
    '(0 0)
    

    实现build-intervalscompute-alpha 后,您可能会注意到将它们组合起来以将alpha-values 简化为一个函数,该函数在生成alpha 列表之前只迭代y-values 一次。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-14
      • 1970-01-01
      • 2018-03-09
      • 1970-01-01
      • 2017-09-12
      • 1970-01-01
      相关资源
      最近更新 更多