方案中的循环

1 scheme functional-programming

我想在方案中定义一个for-n函数,它接受3个参数,start和stop是整数,fn是一个函数.我希望for-n函数用start然后start + 1来调用fn,最后用stop来调用fn.
另外,我想在列表中存储fn返回的所有值.请帮我开始吧 我是一名经验丰富的程序员,但刚刚开始学习计划.

这是我得到的函数定义:

[编辑]

    (define (fn a)
        a
     )

    (define (for-n start stop fn)
      (cond
        ((> start stop) (quote ()))
        ((= start stop) (list(fn start)))
        (else (list(for-n (+ start 1) stop fn))) 
       )
     )


    > (for-n 3 5 fn)
    (list (list (list 5)))
Run Code Online (Sandbox Code Playgroud)

当(for-n 3 5 fn)被调用时,我希望它返回(3 4 5),我做错了什么?

[edit-2]
感谢大家的帮助.我现在正在运作.这是我得到的:

    (define (for-n start stop fn)
      (cond
        ((> start stop) (quote ()))
        ((= start stop) (list(fn start)))
        (else (cons (fn start) (for-n (+ start 1) stop fn))) 
       )
     )
Run Code Online (Sandbox Code Playgroud)

Rya*_*per 5

您很少想使用list递归构造列表.列表是用consnull(又名'())建造的; list只是一个方便的功能来创建一个固定大小的列表.

(list 1 2 3) = (cons 1 (cons 2 (cons 3 null)))
Run Code Online (Sandbox Code Playgroud)

您的条款中应该只有两个案例cond:要么已经完成,要么您没有.

示例有帮助.特别是,选择与递归调用相关的示例.你包括了这个例子(for-n 3 5 fn).那怎么样(for-n 4 5 fn); 该怎么回事?现在,给定start= 3,stop= 5(for-n 4 5 fn)=无论你认为它应该产生什么,你如何构建你认为(for-n 3 5 fn)应该产生的答案?

我强烈推荐如何设计程序(在线提供文本)作为函数式编程的介绍.