8、16、32 ビット ワードを 64 ビット ワードに変換するポリモーフィック関数を作成したいと思います。どうすればいいですか?
更新1
基本ライブラリでは、すべての単語構造には関数がtoLarge
あり、 とfromLarge
の間で変換しLargeWord
ます。これは、私が理解している限り、Word32 の同義語です。
更新2
仕様によると、ワード サイズは 2 の累乗でなければなりませんが、SML/NJ では
Standard ML of New Jersey v110.84 [built: Mon Dec 03 10:23:14 2018]
- Word.wordSize;
val it = 31 : int
- Word32.wordSize;
val it = 32 : int
- Word.toLarge;
val it = fn : word -> Word32.word
> LargeWord.wordSize;
val it = 32 : int
PolyML にいる間
Poly/ML 5.7.1 Release
> Word.wordSize;
val it = 63: int
> Word64.wordSize;
val it = 64: int
> Word.toLarge;
val it = fn: word -> ?.word
> LargeWord.wordSize;
val it = 64: int
それはどうですか?Word.wordSize
2 のべき乗でないのはなぜですか? Word
また、これらの SML 実装で表現が異なるのはなぜですか?
更新3
実際、(<<) 演算子を使用して小さな単語を大きな単語に「昇格」させたいのですが、その方法がわかりません。
更新4
Word
アーキテクチャにLargeWord
依存し、機械語を表すようです。SML/NJ は 64 ビット アーキテクチャをサポートしていないため、ワード サイズが異なります。