for-loop - Racket 中的嵌套“for”循环显示错误“不是程序”
问题描述
我有以下代码行在 Racket 中进行冒泡排序。我发现语法正确,但仍然显示错误:
(define List (list 1 3 5 7 9 2 4 6 8 0))
(define Left 0)
(define Right 0)
(for ([I (range (- (length List) 1))])
(for ([J (range (+ I 1) (length List))])
(set! Left (list-ref List I))
(set! Right (list-ref List J))
(when (> Left Right)
[(set! List (list-set List I Right))
(set! List (list-set List J Left ))]
)
)
)
错误是:
application: not a procedure;
expected a procedure that can be applied to arguments
given: #<void>
arguments...:
#<void>
context...:
/home/jdoodle.rkt:6:2: for-loop
/home/jdoodle.rkt:5:0: for-loop
top-level: [running body]
eval-one-top12
begin-loop
loop
猜不出来为什么。我在https://www.jdoodle.com/execute-racket-online上对其进行了测试,但它没有用。
解决方案
我找到了答案,整理了一下。我必须begin
在when
. 不是双括号。
(for ([I (range (- (length List) 1))])
(for ([J (range (+ I 1) (length List))])
(set! Left (list-ref List I))
(set! Right (list-ref List J))
(when (> Left Right)
(begin
(set! List (list-set List I Right))
(set! List (list-set List J Left ))
))))
或者只是之后的一系列表格when
:
(for ([I (range (- (length List) 1))])
(for ([J (range (+ I 1) (length List))])
(set! Left (list-ref List I))
(set! Right (list-ref List J))
(when (> Left Right)
(set! List (list-set List I Right))
(set! List (list-set List J Left ))
)))
推荐阅读
- c# - 为什么 typeof(HttpResponseMessage) 为空?
- django - Django - 我应该为我的案例使用什么 CBV?
- angular - 两个连接到不同路由文件的路由器出口
- asp.net - 如何使用转换更新 Web.Config 中的部分?
- google-cloud-platform - 将所有流式传输到 bigquery 的数据
- mongodb - 猫鼬在哪里算
- javascript - 字符类中的范围乱序 - 正则表达式
- vba - 如何对多个工作表中的一系列值求和
- java - Jmeter - 单击查看结果树中的响应时出现 java 异常
- html - 使用 Google AppEngine 托管静态网站时出现 404 错误