Racket 中的嵌套 'for' 循环显示错误 'not a procedure'
Nested 'for' loop in Racket shows error 'not a procedure'
我有以下代码行可以在 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 上测试了它,但没有用。
我找到了答案,整理出来了。我必须在 when
之后为多个语句添加表达式 begin
。不是双括号。
(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 ))
)))
我有以下代码行可以在 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 上测试了它,但没有用。
我找到了答案,整理出来了。我必须在 when
之后为多个语句添加表达式 begin
。不是双括号。
(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 ))
)))