簡體   English   中英

有沒有辦法在向量中使用 for-each function,因為它在 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)

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))

我想你正在尋找writeln (或printf~s ):

> (for ([color (vector "red" "orange")])
    (writeln color))
"red"
"orange"

> (for ([color (vector "red" "orange")])
    (printf "~s~n" color))
"red"
"orange"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM