编写一个将过程应用于系列的闭包

时间:2017-11-05 01:11:08

标签: scheme racket r5rs

我正在尝试编写一个返回闭包的过程。我希望能够将任何程序应用到我的系列中。 这是我到目前为止所做的事情,并不适合我。

(define (forAll n m)
   (lambda (op start)
      (op (op n start) (+ n 1) m)))

我希望能够做这些操作:

(define my_iterator (forAll 1 5))       
(my_iterator + 0) → 15
(my_iterator * 1) → 120
(my_iterator (lambda (x y) (display x)(display " ")) "") → 1 2 3 4 5

1 个答案:

答案 0 :(得分:0)

您需要为本地过程指定一个名称,以便您可以对其进行递归,并且它需要包含比合同更多的参数,因为它需要为每次迭代传递状态。以下是您大致需要实施的内容的框架:

(define (for-all from to)
  (define (helper op start from)
    (if stop-condition-expression
        start
        (helper op new-start-expression new-from-expression)))

  (lambda (op start)
    (helper op start from)))