For loop 球拍中嵌套的“for”循环显示错误“非过程”
我有以下代码行在Racket中进行冒泡排序。我发现语法正确,但仍显示错误:For loop 球拍中嵌套的“for”循环显示错误“非过程”,for-loop,functional-programming,scheme,lisp,racket,For Loop,Functional Programming,Scheme,Lisp,Racket,我有以下代码行在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 (li
(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
我猜不出为什么。我试了一下,但没用。我找到了答案,把它整理好了。我必须在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 ))
))))
或者只是在以下时间之后的一系列形式:
实际上,你不需要开始。问题只是额外的双括号!在Scheme expr中,表示将此表达式作为函数应用。所以,除非表达式是你想应用的函数,否则你不能在它周围写。哦,是的,答案中加了
(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 ))
)))