【发布时间】:2016-06-24 06:13:28
【问题描述】:
以下是我为该问题下载的示例代码: 计数器加一,修改它以将用于递增的值作为参数传递。 例如,
(let ((c (create-counter))) (+ (c) (c) (c) (c))) => 6
(let ((c (create-counter 2))) (+ (c) (c) (c) (c))) => 12
源代码:
(define create-counter
(lambda ([num '()])
(let ((temp (lambda (incr)
(let* ((start (- incr))
(count start))
(lambda num
(set! count (+ incr count)) count)))))
(if (null? num)
(temp 1)
(temp num)))))
这是我自己的代码:
(define create-counter
(let ([count 0])
(lambda ([x '()])
(cond
[(null? x) (set! count (+ 1 count)) (- count 1)]
[(> x 0)(set! count (+ x count)) (- count x)])
)))
对于闭包句柄等,我对 let 和 lambda 有一点了解。但是,对于这个极端的问题,我仍然不知道如何像示例代码那样编写。我的代码通过以下示例完成计算:
(+ (create-counter 2) (create-counter 2) (create-counter 2) (create-counter 2)) -> 12
但是我的代码不适用于示例测试用例。我有时会得到 0 或错误。
我必须修改我的源代码才能作为示例运行和工作?请帮助我更好地理解这个范围和闭包,任何提示将不胜感激。谢谢你,对不起我的英语不好。
【问题讨论】:
标签: lambda scheme racket counter let