有没有办法在向量中使用 for-each 函数,因为它在 Scheme 的列表中使用
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)
输出为
1
2
3
4
我想对向量使用相同的类比,正在实现一个函数 vector-for-each
这样 (vector-for-each display (vector "red" "orange"))
。输出应该是 "red" "orange"
.
实现方案中向量的 for-each
的最佳方法是什么?
这将在 Racket 中发挥作用:
(for ([color (vector "red" "orange")])
(display (string-append "\"" color "\"")) ; or use `displayln`
(newline))
我宁愿使用 printf
,但如果您想使用 display
也没问题。我会这样做:
(for ([color (vector "red" "orange")])
(printf "~s~n" color))
我认为您正在寻找 writeln
(or printf
和 ~s
):
> (for ([color (vector "red" "orange")])
(writeln color))
"red"
"orange"
> (for ([color (vector "red" "orange")])
(printf "~s~n" color))
"red"
"orange"
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 library 的实现,其中包括 vector-for-each
:
> (require srfi/43)
> (vector-for-each (lambda (i n) (displayln n)) (vector 1 2 3))
1
2
3
(此版本使用一个函数,该函数接受两个参数——当前元素的索引和元素本身。如果使用多个向量调用,则更多参数。)
在使用列表的方案中,可以轻松使用for-each
。我在下面的代码中使用了它。
(for-each (lambda (arg)
(diplayln arg)
输出为
1
2
3
4
我想对向量使用相同的类比,正在实现一个函数 vector-for-each
这样 (vector-for-each display (vector "red" "orange"))
。输出应该是 "red" "orange"
.
实现方案中向量的 for-each
的最佳方法是什么?
这将在 Racket 中发挥作用:
(for ([color (vector "red" "orange")])
(display (string-append "\"" color "\"")) ; or use `displayln`
(newline))
我宁愿使用 printf
,但如果您想使用 display
也没问题。我会这样做:
(for ([color (vector "red" "orange")])
(printf "~s~n" color))
我认为您正在寻找 writeln
(or printf
和 ~s
):
> (for ([color (vector "red" "orange")])
(writeln color))
"red"
"orange"
> (for ([color (vector "red" "orange")])
(printf "~s~n" color))
"red"
"orange"
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 library 的实现,其中包括 vector-for-each
:
> (require srfi/43)
> (vector-for-each (lambda (i n) (displayln n)) (vector 1 2 3))
1
2
3
(此版本使用一个函数,该函数接受两个参数——当前元素的索引和元素本身。如果使用多个向量调用,则更多参数。)