scheme - Racket 中的while循环?

标签 scheme racket

我熟悉其他语言中的 while 循环,但在这里我编写了一个小函数来计算项总和的导数,但它只执行前两个我想知道是否有办法改变它以考虑更多2?

表达式,E , 表示为列表,所以 2x + 2y + x^3表示为 (+ (* 2 x) (* 2 y) (expt x 3))
请注意,我已经编写了用于计算指数的函数,但它是总和的一部分,并且在前 2 个之后停止

(define (make-sum v1 v2)
  (list '+ v1 v2))

(define (diff-sum x E)
  (make-sum (diff x (first-operator E)) (diff x (last-operator E))))

最佳答案

在专业级 Racket 中,for loops是对序列做某事的标准方法。例如,下面生成一个简单的乘法表:

(define numbers (list 1 2 3 4 5 6))
(for/list ([item numbers])
  (list item (* item 2) (* item 3)))

这是一个循环,遍历每个数字,处理它,并生成一个新的结果列表。相当标准;几乎每种编程语言都有跨集合迭代的概念。

在您必须为计算机科学入门类(class)编写的那种 Racket 中,您可能不得不求助于显式递归或更高阶函数,例如 map相反,这取决于你的导师。这些其他表达迭代的方式与上述循环具有相同的功能:我们只是用不同的方式表达它。

例如,创建上面的小乘法表的相同计算将用显式递归表示如下:
(define (my-loop numbers)
  (cond [(empty? numbers) '()]
        [else
         (define item (first numbers))
         (cons (list item (* item 2) (* item 3))
               (my-loop (rest numbers)))]))
(my-loop numbers)

并隐含地使用 map :
(define (f item)
  (list item (* item 2) (* item 3)))
(map f numbers)

关于scheme - Racket 中的while循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12966565/

相关文章:

scheme - 顶级列表中所有数字的总和

racket - 如何申请打字/ Racket ?

oop - python 的 __repr__ 和 __str__ 的 Racket 等价物?

racket - Racket 中的 -D 选项和#ifdef

recursion - Scheme 中的递归函数只返回列表中的第一项

scheme - 模拟 scheme 在 common lisp 中定义

scheme - 如何使用方案宏来显示评估树

racket - *使用语言 `(+ 1 1)`的速度*极慢(对于 "How To Design Programs - Beginning Student"超过10秒)

scheme - 为什么线程没有执行(Racket)

clojure - 在 Clojure 的元循环评估器中评估 "true"