gpt4 book ai didi

function - 方案基本循环

转载 作者:行者123 更新时间:2023-12-01 10:11:34 26 4
gpt4 key购买 nike

我正在尝试编写一个行为类似于循环的方案函数。

(循环最小最大函数)

这个循环应该执行范围最小和最大(整数)之间的函数

-- 这样的例子之一

(loop 3 6 (lambda (x) (display (* x x)) (newline)))

9
16
25
36

我将函数定义为

( define ( loop min max fn)
(cond
((>= max min) ( ( fn min ) ( loop (+ min 1 ) max fn) ) )
)
)

当我运行代码时,我得到了结果,然后发生了错误。我无法处理这个错误。

(loop 3 6 (lambda (x) (display(* x x))(newline)))

9
16
25
36

Backtrace:
In standard input:
41: 0* [loop 3 6 #<procedure #f (x)>]

In utku1.scheme:
9: 1 (cond ((>= max min) ((fn min) (loop # max fn))))
10: 2 [#<unspecified> ...
10: 3* [loop 4 6 #<procedure #f (x)>]
9: 4 (cond ((>= max min) ((fn min) (loop # max fn))))
10: 5 [#<unspecified> ...
10: 6* [loop 5 6 #<procedure #f (x)>]
9: 7 (cond ((>= max min) ((fn min) (loop # max fn))))
10: 8 [#<unspecified> ...
10: 9* [loop 6 6 #<procedure #f (x)>]
9: 10 (cond ((>= max min) ((fn min) (loop # max fn))))
10: 11 [#<unspecified> #<unspecified>]

**utku1.scheme:10:31: In expression `((fn min) (loop # max ...))`:
utku1.scheme:10:31:Wrong type to apply: `#<unspecified>`
ABORT: (misc-error)**

最佳答案

cond 表达式的每个子句都具有 (cond expr1 expr2...) 的形式,但是当 expr1 和 expr2 应该分开时,您将它们都包裹在括号中。解决方案是在开头指定 begin:((>= max min) (begin expr1 expr2)) 或使 begin隐式:((>= max min) expr1 expr2)

或者,使用 when 语句而不是 cond 可能更有意义,因为您只有一个选择:

(define (loop min max fn)
(when (>= max min)
(fn min)
(loop (+ min 1) max fn)))

因为condwhen都是使用了if的宏,所以两个版本都变成了

(define (loop min max fn)
(if (>= max min)
(begin (fn min) (loop (+ min 1) max fn))
(void)))

无论如何。

关于function - 方案基本循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4574914/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com