有没有办法在向量中使用 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

(此版本使用一个函数,该函数接受两个参数——当前元素的索引和元素本身。如果使用多个向量调用,则更多参数。)