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)
您很少想使用list递归构造列表.列表是用cons和null(又名'())建造的; 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)应该产生的答案?
我强烈推荐如何设计程序(在线提供文本)作为函数式编程的介绍.