F# では、ここで配列の "Item" メンバーにアクセスできないのはなぜですか:
let last (arr:System.Array) =
let leng = arr.Length
arr.[leng-1] // Error: Field, constructor or member "Item" is not defined.
これを試すことができますか?
let last (arr:_[]) =
let leng = arr.Length
arr.[leng-1]
これは一般的な dotnet のようです。私が見るドキュメントを調べる
Array クラスは、配列をサポートする言語実装の基本クラスです。ただし、Array クラスから明示的に派生できるのは、システムとコンパイラだけです。ユーザーは、言語によって提供される配列構造を使用する必要があります。
また、F# では通常、不変の List を使用することに注意してください。
let last (stuff: _ list) =
let l = stuff.Length
stuff.[l]
ただし、リストを使用している場合は、より効率的なアルゴリズムを使用します。F# リストはリンク リストです。
let rec last = function
| hd :: [] -> hd
| hd :: tl -> last tl
| _ -> failwith "Empty list."