スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

どう書く?org F# 逆転したビット列

 GushwellさんBLUEPIXYさん がやっておられた「逆転したビット列」を私もやってみました。
 もとのお題は「どう書く?org」の「逆転したビット列」http://ja.doukaku.org/61/です。 
 Gushwellさんのコメント欄に投稿したものを少し改良しました。
 
 手癖なのか自分のコードはlet rec ...........res = の形が多いようです。
 
 コードはこちら。(なおint32型でなくuint32型を使用しています。)
 
 > let inline getLowestBit (n: uint32)= 
   if ((n >>> 1) <<< 1) <> n then 1u
   else 0u
 
let GetReverseNum num width = 
    let rec GetRNumSub curWidth limitWidth rNum res =
       if curWidth = limitWidth then res
       else
         GetRNumSub (curWidth + 1) limitWidth (rNum >>> 1) ((res <<< 1) ||| (getLowestBit rNum))
    GetRNumSub 0 width num 0u
 
let pow2MaxMinus1 (m: int32) =
    let rec subPow curM res =
        if curM = m then res
        else subPow (curM+1) (res <<< 1 ||| 1u)
    subPow 1 1u
 
let makeReversedNumSeq n =
    seq{ for i in  0u .. (pow2MaxMinus1 n) -> (GetReverseNum i n) }
 
let disp n =
    (makeReversedNumSeq n) |> Seq.iter (fun x -> printfn "%A" x) ;;
 
val inline getLowestBit : uint32 -> uint32
val GetReverseNum : uint32 -> int -> uint32
val pow2MaxMinus1 : int32 -> uint32
val makeReversedNumSeq : int32 -> seq<uint32>
val disp : int32 -> unit
 
(実行例)
 
> disp 4;;
0u
8u
4u
12u
2u
10u
6u
14u
1u
9u
5u
13u
3u
11u
7u
15u
val it : unit = ()
>  
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

指がすべったようですよ

>Bushwell

ありゃりゃりゃりゃ

これはこれはGushwellさんに失礼なタイプミスをしてしましました。
訂正しました。コメントありがとうございました。
プロフィール

T GYOUTEN

Author:T GYOUTEN
F#と英単語とフリーソフトと読書に興味があります。
ホームページでフリーソフトも公開しています。どぞ御贔屓に。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
フリーエリア
フリーエリア
blogram投票ボタン
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。