これは実装に依存します。
プロのプログラマーは車輪の再発明を避け、minのような関数を使用しますが、これはうまく機能します。
上記のようなコードは、C コードの意味を保持したまま、「文字通り」翻訳できます。
#lang racket
(define smallest +inf.0)
(define an-array (vector 3 1 4 1 5 9 2 6))
(define array-length 8)
(for ([i (in-range 0 array-length)])
(when (< (vector-ref an-array i)
smallest)
(set! smallest (vector-ref an-array i))))
(print smallest)
しかし、これは、経験豊富なラケット プログラマーにとって、優れた文体ではありません。ベクトルでしか機能しないだけでなく、コードがインデックスに関係しすぎています。
代わりに、私たちが気にかけているものの要素に取り組んでみませんか? 反復の焦点を変更すると、次のようになります。
#lang racket
(define smallest +inf.0)
(define an-array (vector 3 1 4 1 5 9 2 6))
(for ([elt an-array])
(when (< elt smallest)
(set! smallest elt)))
(print smallest)
これは少し良いです。
このようなことを複数の場所で行う場合は、さらにクリーンアップできるかどうかを確認する価値があるかもしれません. Racket では、愚かなループの詳細を何度も考えずに済むように、これを記述した方がよいでしょう。これを一般化してクリーンアップする方法の具体例として、for/max
here (またはhere ) の定義を参照してください。
重要なのは、配列だけでなく他のものでも機能するようにし、それを頻繁に行う場合は、それを言語の一部にすることです。