[英]Is there a way to use for-each function in vectors as it is used in Lists in Scheme
在使用列表的方案中,可以輕松使用for-each
。 我在下面的代碼中使用了它。
(for-each (lambda (arg)
(diplayln arg)
output 是
1
2
3
4
我想對向量使用相同的類比,正在vector-for-each
這樣(vector-for-each display (vector "red" "orange"))
。 output 應該是"red" "orange"
。
在 scheme 中實現for-each
for vectors 的最佳方式是什么?
vector-for-each
可以在 Racket 中定義:
#lang racket
(define (vector-for-each proc vec) ;; (X -> ) VectorOfX ->
;; apply proc to elements of vec in order
(do ([i 0 (add1 i)])
((= i (vector-length vec)))
(proc (vector-ref vec i))))
(vector-for-each displayln '#(1 2 3))
Racket 附帶了SRFI-43 矢量庫的實現,其中包括vector-for-each
:
> (require srfi/43)
> (vector-for-each (lambda (i n) (displayln n)) (vector 1 2 3))
1
2
3
(此版本使用 function,它采用兩個 arguments - 當前元素的索引和元素本身。如果使用多個向量調用,則需要更多 arguments。)
這將在球拍中發揮作用:
(for ([color (vector "red" "orange")])
(display (string-append "\"" color "\"")) ; or use `displayln`
(newline))
我寧願使用printf
,但如果你想使用display
也沒關系。 我就是這樣做的:
(for ([color (vector "red" "orange")])
(printf "~s~n" color))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.