我熟悉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))))
Run Code Online (Sandbox Code Playgroud)
dyo*_*yoo 16
在专业级Racket中,for循环是对序列执行某些操作的标准方法.例如,以下代码生成一个简单的乘法表:
(define numbers (list 1 2 3 4 5 6))
(for/list ([item numbers])
(list item (* item 2) (* item 3)))
Run Code Online (Sandbox Code Playgroud)
它是一个循环,遍历每个数字,处理它,并生成一个新的结果列表.相当标准; 几乎每种编程语言都有一个跨集合的迭代概念.
在您必须为介绍性计算机科学课程编写的Racket中,您可能不得不求助于显式递归或更高阶函数(如地图),具体取决于您的教师.这些表达迭代的其他方式与上面的循环具有相同的功能:我们只是略微区别它.
例如,创建上面的小乘法表的相同计算将表示为具有显式递归的以下内容:
(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)
Run Code Online (Sandbox Code Playgroud)
并隐含地使用map:
(define (f item)
(list item (* item 2) (* item 3)))
(map f numbers)
Run Code Online (Sandbox Code Playgroud)