为什么列表集在Racket中的以下函数中不起作用:
(define (trimlist sl)
(let ((num 0) (ss "") )
(set! num (length sl))
(for ((i num))
(println i)
(set! ss (list-ref sl i))
(println ss)
(set! ss (string-trim ss))
(println ss)
(list-set sl i ss ) )
sl ))
> (trimlist (list " a" "b " " c "))
0
" a"
"a"
1
"b "
"b"
2
" c "
"c"
'(" a" "b " " c ")
println语句显示每个元素都被正确修剪,但返回的列表仍然有未修剪的项目。修剪过的元素不会替换列表中的原始元素。
问题在哪里,我该如何解决?
答案 0 :(得分:2)
这是因为列表集不具有破坏性(如果是,它的名称将是“list-set!”)。你可以用
解决这个问题(set! sl (list-set sl i ss))
无论如何,还要考虑一个更方便的解决方案,例如:
(define (trim-list sl) (map string-trim sl))