fc2ブログ

F#文法リファレンス - if式

概要
 ある条件により実行する処理を変えたいときはif式(if then式ともいう)を使用します。

使用に適した状況
 現在の状況により返す値を決定したい場合や、状況により実行する処理を変えたい場合に使用します。ただし、基本的な使用法は「適切な値を返す」ことです。最後に値を返すように意識して使用しましょう。

サンプル

(*----------------------------------------------

    if式

----------------------------------------------*)

//if式を使用する関数を定義
let selection x = 
  if ( x > 0 ) then "0以上" 
  elif ( x < 0 ) then "0未満" 
  else "0"

//if式を試す
selection 10 |> printfn "数値は%s"
selection -10 |> printfn "数値は%s"
selection 0 |> printfn "数値は%s"


文法
 「if」キーワード、真偽を返す条件式、「then」キーワード、返す値もしくは条件が真のとき実行する処理を書きます。条件が偽のとき返す値、もしくは実行する処理、「else」キーワードと一連のコードを書きます。なお、複数の条件が考えられるときは、「elif」キーワード、「then」キーワード、返す値もしくは実行する処理を任意の数だけ書きます。

解説
 If式を使用すると、条件を判定して、真偽の結果に従って値を返すことができます。また、コンソール画面にメッセージを出力するなどの特定の処理をすることもできます。ただし、If式本来の使い方は、条件を判定して「適切な値を返す」ことです。一応、printfnのような値を返さない処理を記述することはできますが、それはあくまでも例外的な使用法であり、極力値を返すように意識するべきです。関数プログラミングの基本は、関数屋敷を使って値をやり取りすることであり、副作用を伴う(値を返さない)プログラムは例外です。
 他言語の経験者が引っかかりやすいのは、F#の場合if文ではなくif式だという部分です。式と文の違いは、値を返すところです。If式は必ず値を返さなければなりません。もし体を返さない場合は、返す値がないことを表わす特別な値「unit」を返します。なお、printfnなどの値を返さない命令文は、unitを返すようになっています。
スポンサーサイト



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

中の人の徒然草448

 また、日記を書くのを忘れていた・・・。もし楽しみにしている人がいたらごめんなさい。私は変わらぬ生活を送っています。妹も相変わらず愉快です。その件については、また改めて書きます。
 私が最近考えたのは、人間の言葉って面白いという事です。日本語には色々な面白みがあり、中学生の頃はよく辞書を読んでいました。ここ最近は、嫌いだった英語も面白いと感じられるようになってきました。
 英語は日本語との差異を考えると面白いです。意外とぱっと出ないのが、数学の英語表記です。私が英語を苦手とすることもあって、数学の記号を英語で読むとどうなるのか、ちょっと思いつきませんでした。数年前、このことに気づいて、数学専用の英語辞書を買いました。
 数学記号を英語で読むと、1./2(2分の1)は、one halfもしくは、one over twoだそうです。日本語と発想が逆だと感じてしまいます。英語が弱いので書くとき間違えそうです。微分積分にいたっては、∫ydx(私はインテグラルワイディーエックスと読んでいた)は正式に書くとintegral of y with respect to xです。重積分(記号が書きにくいので省略)は、double integral of z with respect to x and yです。一瞬だけ、あれ? xを尊敬しているの?と思ってしまいました。もちろん違いますが・・・。うーん、こんな表現、英語力がない私には出てこないです。他にもsoundという単語は、言葉から受けた印象であれば何でもsoundで表現してもよいとか、foundの意味は「思う、感じる、印象を受ける」程度であるなど。ちなみに、「ちょー嬉しい♪」はdouble happyらしいです。ソースは映画です。女子高生がdoubleを連発していました。私が英語弱いだけかもしれませんが、おそらく、学校で英語を習ったからと言って出てこない表現だと思います。
 それに加えて、やはりプログラミング言語も面白いです♪プログラミング言語はいまだに飽きません。言語理論のオートマトンも面白いです。ムーア型機械とか、ミーリー型機械とか、チューリングマシンとか、あんな単純なオブジェクトで複雑な言語が表現できるとは驚きます。一見難しいですが、ミーリー型とかムーア型とかを実装してみると、その単純さがひときわ目立ちます。業務システムの方が難しいオブジェクト使います。割り切れない人間臭さが介入してくると、ビジネスロジックが複雑になってくるんですよね・・・
 なにはともあれ、世の中は面白いもので満ち溢れています。日常が面白くないという人も沢山いますが、そんな人は身の回りのものを観察していないだけだと思います。面白いものなんていくらでもあります。もし、日常を楽しみたい人は、身の回りのものを観察してみるとよいと思います。きっと、日常が楽しくなります。

テーマ : 日記
ジャンル : 日記

F#文法リファレンス - ローカル関数

概要
 関数の内部でのみ使用する関数を定義します。

使用に適した状況
 関数内(関数の本体)のプログラムを簡潔にしたいとき。

サンプル

(*----------------------------------------------

    ローカル関数

----------------------------------------------*)

let Add ( x : int ) ( y : int ) =
  let Inc x = x + 1 //ローカル関数
  let rec Sub x y count = //ローカル再帰関数
    if ( y = count ) then x 
    else Sub <| Inc x <| y <| count + 1
  Sub x y 0
let x = 10
let y = 2
let result = Add x y
printfn "%d + %d = %d" x y result


文法
 関数の本体でインデントを下げ、関数をlet束縛します。ローカル関数は束縛後、適切なスコープ内で自由に使用できます。

解説
 その関数内のでみ使用する関数を定義します。無名関数/匿名関数も同様の効果がありますが、意味合いが異なります。無名関数/匿名関数の方は、名前を付ける必要のない、ただの関数値である事を表わしています。一方、ローカル関数は、現在は特定の関数内でのみ使用するものの、意味があるプログラムの集まりを表わしています。従って、ローカル関数は後で普通の関数に昇格?されることがあります。
 ローカル関数を定義するという事は、読み手に意味があるプログラムの塊があることを示すので、いい加減に定義せず、極力意味が明快になるように意識してプログラミングしましょう。

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

F#文法リファレンス - ラムダ式(無名関数 / 匿名関数)

概要
 ラムダ式と呼ばれる名前がない関数を定義することができます。

使用に適した状況
 局所的にしか使用しない関数を定義したいときや、関数値を定義したいときに使用します。

サンプル

(*----------------------------------------------

    ラムダ式( 無名関数 / 匿名関数 )

----------------------------------------------*)
let add = fun x y -> x + y
let x = 1
let y = 2
printfn "%d + %d = %d" x y <| add x y


文法
 funキーワード、パラメータ、->演算子、本体の順番に記述します。

解説
 プログラミングでは、ループ内でしか使用しないカウンタ用のローカル変数などのように、局所的にしか使用したくないものがあります。同じ発想で、関数型言語であるF#は、局所的に使用する関数を定義することができます
 プログラミングに慣れていない人は、名前がないという事と、局所的という事柄を関連付けて考えにくいと思います。その意味を知るには、名前とは何かを考えなくてはなりません。
 名前というものは何を意味するのでしょうか?名前が意味するところは広く、哲学的に色々な物事が考えられると思いますが、プログラミングでは主に実用面を考えます。実用面から名前を考えると、何かの要素を特定するものだといえます。例えば、アクセス修飾子の問題を考えなければ、加算関数Addは名前を知っていれば他の場所から呼び出せます。ということは、名前がなければ呼び出せないという事でもあります。つまり、プログラミングにおいて、名前がない要素は、他の場所から使用させないという事を表わしています。
 関数型プログラミングに慣れてい居ない人は、他の場所から呼び出す必要がない関数というものをイメージし難いと思います。ですが実は難しいものではなく、簡単かつありふれたものです。
 プログラミングをしていると、関数が複雑になり、プログラムを短く簡潔にするためにヘルパー関数を定義することがあります。そうしてできたヘルパー関数をよく考えると、特定の関数だけしか必要とされていないことが多いです。このヘルパー関数をそのままにしておくと、結果として名前付きで定義された関数の数が増えるので、保守作業にあたっているプログラマーの負担になるかもしれません。もしその時、無名関数であったならば、保守作業をしているプログラマーは、ひとまず注目する必要がない関数だと分かり、読むコードの量を減らせます。
 ほかの用途ももちろんあります。それは高階関数です。高階関数で関数値を返す時、呼び出した側が関数値を名前で束縛するので、名前を付ける必要がありません。そこで返す関数を無名関数にするケースが多いです。
 無名関数は地味な文法ですが、他の文法と組み合わせることにより、プログラム全体の表現力を上げます。また、無名関数を適切に使用すると保守性が向上します。

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

ネタつつき157 - 抽象化と情報技術者の本質

 情報技術の基本は抽象化です。ですからこのブログでは抽象化という言葉よく出ます。ですが、情報技術とは無縁の普通の人や、まだ情報技術に精通していないは、あまりピンとこないと思います。そこで今回、抽象化とは何かについて書くことにしました。  情報技術者の私はインクリメント(1ずつ増加する演算)とデクリメント(1ずつ減少する演算)は抽象化すると同じ関数に見えます。普通の人はこの発言にビックリすると思いますし、数学好きな人もビックリするかもしれません。そこが、数学と情報技術の違いだと思います。抽象化と言っても、その内容は職業ごとに異なるようです。
 数学者は形式や定義を気にするでしょう。また普通の人は、小学生のころ習った事と照らし合して「同じなんてありえない」と考えるでしょう。しかし、私たち情報技術者は、どのように実行するのか(実現方法や構成物)を中心に考えます。

1~9のインクリメントとデクリメントは次のようになります。
インクリメント:1 2 3 4 5 6 7 8 9
デクリメント:9 8 7 6 5 4 3 2 1

情報技術者は、これを頭の中でイメージして、抽象化したら同じだと考えます。何故ならば、どちらも次の数値を返しているだけだからです。仮にこの演算をNextと呼びます。このNext演算に対して、数値を1~9の順番に並べた記号表を渡せばインクリメント演算。数値を逆に並べた記号表を渡せばデクリメント演算になります。つまり、数値の次の値を示すという共通動作があるから抽象化したら同じだと判断するのです。
 世間一般の人は誤解していますが、情報技術者というものはパソコンオタクではありません。情報技術者はパソコンという道具を使いますが、その本質は物事を情報として抽象化し、その情報を分析して処理する点にあります。パソコンはあくまでも道具にしかすぎません。情報技術に熟達すれば、パソコンを使わずに力を発揮できます。
 情報技術者の本質は、先ほどの例で示したように、物事を抽象化して考えるところにあります。しかし抽象化する能力は、情報技術者の専売特許ではありません。人間は誰しも、物事を抽象化する力があります。物事を自由に抽象化できるようになると、色々な考えができるようになります。考えるという行為は何をにするにしても重要です。情報技術者に限らず、抽象化する力を鍛えるとよいと私は思います。

テーマ : 文明・文化&思想
ジャンル : 学問・文化・芸術

F#文法リファレンス - 関数値を受け取る高階関数

概要
 F#は関数を引数として受け取り処理をする高階関数を定義することができます。関数を引数として指定できると、似たような関数の増加を防げますし、より柔軟なプログラミングが可能となります。

使用に適した状況
 主に、共通したパターンを持つ類似関数が多いときや、動的に作用する関数を定義したいときなどに使用します。関数を受け取る関数は非常に強力で、その可能性は無限大です。

サンプル

(*----------------------------------------------

    高階関数 : 関数を引数として受け取る関数

----------------------------------------------*)

//指定した関数に値を適用して結果を返す高階関数
//※「 'a 」は型を問わない
let Apply ( f : 'a -> 'a -> 'a ) x y = f x y
 
 //高階関数を試用する
let x = 10
let y = 2
let f = fun x y -> x * y 
printfn "%d * %d = %d" x y <| Apply  f x y


文法
 引数として関数を受け取る高階関数専用の文法はありません。引数の型として関数を指定するだけです。

解説
 関数をよく観察すると、同様のパターンで動作する関数は多いです。それらの似た関数を扱う機能があれば、より柔軟かつ強力なプログラミングが可能となります。その望みをかなえるのが高階関数です。
 関数値の引数を受け取る関数は、関数そのものを扱えるので、命令型プログラミングでは考えられなかった処理が可能となります。例えば、実行時に適用する関数を変化させることができますし、類似関数をプログラミングする労力から解放されます。類似関数の定義がなくなるという事は、保守性に優れたプログラムが欠けるようになります。ただし、あまりにも抽象化しすぎると、意味が分からない関数が出来上がり、保守性を著しく下げるので、十分に注意してください。何事もやりすぎは毒なのです。

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

F#文法リファレンス - 関数を返す高階関数

概要
 関数を値として扱う関数を高階関数と呼びます。値としての函数である関数値は、引数として指定することもできますし、呼び出し元へ返すこともできます。この記事は関数を返す高階関数についての記述です。

使用に適した状況
 関数に共通したパターンがあり、抽象化できるときに使用するとよいでしょう。関数を抽象化すると、似た定義の関数の増加を防ぎ、より柔軟なプログラミングが可能となります。

サンプル

(*----------------------------------------------

    高階関数 : 関数を返す関数

----------------------------------------------*)

//演算関数を返す高階関数
let operation ( x : char ) : ( int -> int -> int) = 
  match x with
    | '+' -> ( fun y z -> y + z )
    | '-' -> ( fun y z -> y - z )
    | '*' -> ( fun y z -> y * z )
    | '/' -> ( fun y z -> y / z )
    | _ -> raise <| 
            new System.ArgumentException( x.ToString() + "は対応していません。" )

//高階関数を試すためのヘルパー関数
let applyOpe ope =
  let x = 10
  let y = 2
  let pf = operation( ope )
  let r =  pf x y
  printfn "%d %c %d = %d" x ope y r

//各種演算を試す
applyOpe '+' |> ignore
applyOpe '-' |> ignore
applyOpe '*' |> ignore
applyOpe '/' |> ignore


文法
 関数値を返す高階関数は特別な文法を持ちません。関数値を戻り値とする関数を定義すると、関数を返す高階関数を定義できます。

解説
 プログラミングの基本は、物事を抽象化して考える事です。関数も例外ではありません。従来の命令型プログラミングに慣れている人は、一般にデータだけを抽象化して考える傾向がありますが、関数も抽象化して考えられます。具体的に言うと、サンプルで示した演算子ように、一部のプログラムだけ違う関数は沢山あります。それらの関数を抽象化して考える事により、プログラミング可能な領域と発想が広がります
 関数値を返す高階関数は実に強力です。始めは違和感を覚えるかもしれませんが、慣れれば関数を抽象化して考えるのが当たり前になります。その状態になったとき、貴方のプログラミング力が一段階上がっていると言えると思います。

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

ネタつつき156 - 最小の命令セットについて考えてみた

 私は趣味と実益を兼ねて、仮想計算機を何度か実装しています。その時一つの疑問が浮かびました。それは、計算機に最低限必要な命令は何かという事です。むろん、この話は機械語レベルのものです。
 機械語命令を分類すると、データ転送命令、論演算、算術演算、論理演算、プロセッサ制御命令、ジャンプ、フラグ操作などがあります。このうち絶対に必要なものは何でしょうか?私は最終的に、ビット反転、比較、データ転送の3つだと考えました。これからその理由を書きます。
 普通の人は算術命令の四則演算は必須だと思うでしょう。私も初めはそう思ったのですが、よく分析して、他の手段で再現できる事に気づきました。例えば、加算命令は、インクリメント命令、比較命令、ジャンプ命令、データ転送命令の4つで実装可能です。乗算は加算の繰り返しで実装できますし、引き算と除算も代数的に考えれば、足し算と乗算の逆でよいことがわかります。従って、算術演算は必須の命令ではありません。
 次に気になるのは論理演算だと思います。論理演算は、AND演算とOR演算は他の命令で実装可能か否かが鍵となります。この2つの論理演算をよく分析すると、1ビットを0か1にしています。ですから私は、条件に判定し、ビット反転さえできれば、実装可能だと判断しました。この考えを発展させると、インクリメント演算ですら必要ありません。何故ならば、ビット反転さえできれば実装可能だからです。
 最後にジャンプ命令について考えます。機械語命令もしくはアセンブラに慣れている人が気にするのは、ジャンプ命令だと思います。ジャンプ命令なしでアセンブラプログラミングできないと考える人もいるでしょう。しかしながら、私はこれも他の命令で代用可能だと結論付けました。何故ならば、ジャンプ命令は計算機のプログラムカウンタを変更する命令だとみなせるからです。という事は、データ転送命令でプログラムカウンタに直接値を転送できれば、ジャンプ命令がなくても問題ありません。
 他の命令については比較的高機能なので説明の必要はないと思います。唯一問題となるのは、プロセッサ制御命令だと思います。しかし今回想定しているのは、最小の命令しか持たないプロセッサですから、特別な命令を想定しない方が良いでしょう。そうしないと、最小の機能しか持たない機械という前提を満たせなくなります。
 以上のようにして、機械語命令をもっと小さな機械語命令に置換できないかを考えていった結果、最初に述べた、データ転送命令、比較命令、ビット反転の3つがあればよいとの結論を出しました。データを転送できなければ、明らかに計算機としての仕様を満たせません(一切の入出力ができない)し、機械が0か1なのかも判別できなければ何もできません。ビット反転については、電気信号を変更できなければ、計算機と呼べないでしょうから必須だと思います。おそらく、電気の状態がわからない状態で、機械を操るのは不可能でしょう。1ビットの状態もわからず、操作もできない機械で情報を処理できると私は思えません。
 この結論は私自身も驚きました。私が慣れ親しんでいるIntel製のCPUは仕様が複雑で、OSとかコンパイラなどを実装するとき大変ですし、仮想計算機として再現するのも大変です。その経験から私は、計算機は複雑なものだと考えていました。しかしながら、最小の機械を考えると、複雑に思える計算機も原理は非常に単純だとよくわかりました。
 もしかしたら、計算機に限らずこの世の全ても根源は単純なのかもしれません。赤子の頃から私は、曖昧な概念や難しいも概念を分析するのが好きで、この手の事をよく考えていました。皆様も暇なとき、こうした分析遊びをするとよいと思います。きっと楽しい時間を過ごせます。

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

関数型プログラミングとは何か

 残念ながら関数型プログラミングは一般的に知られていないようなので、関数型プログラミングを簡潔に解説することにしました。少しでも参考になれば幸いです。
 関数型プログラミングは宣言型プログラミングの一種です。宣言型プログラミングについては、違う記事で解説したので説明を省きます。一種という事は、他の宣言型プログラミングがあるのかと気になると思います。関数型プログラミング以外の宣言型プログラミングでメジャーなものを挙げると、集合型と論理型があります。参照型はSQL、論理型はPrologが有名です。今回は解説しませんが、面白いので一度体験してみる事をお勧めします。特にSQLは避けては通れない存在でしょう。
 本題に入ります。関数型プログラミングというぐらいですから、まずは関数について知らねばなりません。「関数」というとあまり強いイメージがないと思います。これは、漢字と翻訳に問題があったのが原因だと思います。関数はもともと函数と書きます。函(ハコ)という漢字から、何かを入れるものをイメージすると思います。それで大体あっています。しかし、「数」というからには、数以外のものは駄目なのかという印象を受けてしまうでしょう。これは翻訳の問題です。と言っても、念のために言っておきますが、過去に何もないなか苦労して翻訳した人を責めるつもりは毛頭ありません。誤解なきよう。
 関数の元となる英語単語はfunctionです。functionの主な意味は、そのもの本来の働き、機能、仕事におけるその人の職務、任務、職業、事柄の作用、効用です。他にも派生した意味がありますが、ここでは関係ありません。この意味を見ると分かると思いますが、機能もしくは作用というべきものです。すなわち、数に限った話ではないのです。名前に「関数」と、数の文字がついているから、数に限定された数学特有のいかめしい概念だと感じてしまいます。ですが、そんな限定されたものではなく、ただの機能もしくは作用です。それがわかれば、関数型プログラミングが見えてきます。
 functionの意味を直訳して考えると、関数型プログラミングは、機能もしくは作用で行うプログラミングと言えるでしょう。もう少しく゚、意訳的に考えると、物事の機能もしくは作用に着目してプログラム化し、機能もしくは作用で構成するプログラミングと言えると思います。
 これでもまだ意味が分かり難いので、もっと噛み砕いて説明します。函数は入力と出力を考えます。例えば、プラス演算の函数は、2つの数値を入力し、1つの数値を返します。つまり、入力と出力に着目して行うプログラミングとも言えます。こう考えると、イメージしやすいと思います。
 ここまでの説明を読んで、疑問を覚えた人が居るでしょう。おそらくそれは、関数型プログラミングの長所です。長所がなければ、慣れ親しんだ命令型プログラミングをしたいと思うのが人情でしょう。でも心配いりません。ちゃんとした長所があります。それは、全てが眼に見える事です。
 入力と出力に着目してプログラミングをするという事は、同じ値を渡せば、常に同じ値が返されることを意味します。という事は、入力値と出力値をプログラマーが確認できるので、命令型プログラミングと比べると不透明な部分が少ないです。不透明なことが少なければ、テストもしやすく理解もしやすいです。
 命令型プログラミングは、何かをさせる事でプログラミングを行います。従って、機械の状態に依存しているプログラミングと言えます。状態に依存しているという事は、テストするときも同じ状態を再現しなければなりませんし、眼に見えない状態を想像しつつプログラムを理解せねばなりません。その点では、関数型プログラミングの方に軍配が上がります。
 この関数型プログラミングの長所は、非常に大きなものです。プログラミングで問題となるのは、打つ時ではなく、打った後のメンテナンスです。また、テストも重要です。従って、関数型プログラミングは、極めて現代の要求にマッチしたものと言えるでしょう。それ故、命令型プログラミング言語にも、関数型プログラミング言語の要素を取り入れる動きがあるのです。
 関数型プログラミングは一見難解であり、名前を聞いただけで忌避する人も多いでしょう。しかし実際は、とても単純な考えで行うものであり、その長所も現代の要求とマッチしているので、学んで損はないと思います。もしこの記事を読んで、関数型プログラミングに興味が湧いたら、F#を試してみるとよいでしょう。外見に惑わされず、単純な本質に目を向け、積極的に吸収しましょう。それこそが、人間本来の姿だと私は思います。

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

F#リファレンス - 関数

概要
 関数を定義します。

使用に適した状況
 F#は関数型言語なのでいつでも適しています。おそらく、関数を一切使用しない関数型プログラミングは考えられないでしょう。

サンプル

(*----------------------------------------------

    関数

----------------------------------------------*)

//定義
let pow x = x * x

//呼び出し
let result = pow 10
printfn "値%d" result

(*
浮動小数点も可能
引数の型は推論される
let result = pow 1.0
printfn "値%f" result
*)

//パラメータの型を明示して関数を定義
let multiply ( x : int ) ( y : int ) = x * y
let value = multiply 10 2
printfn "値%d" value


文法
 変数名、パラメーター、=記号、関数の本体の順番に書きます。基本的に型は明示する必要がありません。F#が型を推論してくれます。もちろん、使用目的がはっきりしている場合は、型を明示したほうが良いでしょうが、型に依存しない関数は多いでしょう。
 型を明示する場合は、丸括弧内にパラメータ名 、「:」記号 、型名の順に記述します。パラメータが1つの場合は丸括弧は必要ありません。

解説
 F#は関数型言語なので、他言語に比べると自由に関数を定義できます。例えば、任意の場所で関数を束縛できますし、入れ子構造の関数など(他の記事で説明)も簡単に定義できます。
 F#のプログラミングでは基本的に、関数のパラメータをF#に型推論させます。何故ならば、物事を抽象化し関数としてみた場合、型に依存したものでないことが多いからです。サンプルを例に挙げて言うと、2乗および掛け算は整数に限ったものではありません。浮動小数でも使用できますし、演算を定義していれば、どのような型でも適用可能です。

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

プロフィール

インドリ

Author:インドリ
みなさん、はじめまして、
コンニチハ。

ボクは、無限の夢(infinity dream)を持つネタ好きな虹色の鳥インドリ(in dre)です。
色々な情報処理技術を啄ばむから楽しみにしてね。

http://twitter.com/indori
は別人による嫌がらせ行為です。
私とは関係ないので注意して下さい。
次はなりすましブログなどをするかもしれませんが、ここ以外でブログをするつもりがないので、ここ以外にインドリのブログがあったとしても無視してください。


何度言っても分からない人がいるので、ここにコメント欄へ書き込むときの注意事項を書きます。


一、社会人としてのマナーをわきまえましょう。
一、妄想に基づく書き込みを止めてください。
一、暴言の類は書かないで下さい。
一、某誹謗中傷サイトの書き込みは彼らの妄想に基づく書き込みですから無視して、ここへ書き込まないで下さい。
一、コメント書く前に他のコメントよく読んでから行って下さい。
一、言いがかかり等の行為を禁止します。
一、その他常識的に考えて迷惑なコメントはしないで下さい。


以上のルールを守れない人のコメントは削除します。



利用上の注意
ここに紹介してある文章およびプログラムコードは正確であるように心がけておりますが、内容を保証するものではありません。当サイトの内容によって生じた損害については、一切の責任を負いませんので御了承ください。


執筆したCodeZineの記事


【VB.NETで仮想CPUを作ろう】

  1. VB.NETで仮想CPUを作ろう
  2. レジスタの実装
  3. 仮想CPUのGUI化
  4. テストドライバの改良
  5. CPUの基礎動作の実装
  6. MOV命令の実装
  7. ADD命令実装
  8. SUB命令実装
  9. INC命令&DEC命令の実装と命令長
  10. MLU命令の実装とModR/Mについて
  11. DIV命令の実装とイベント設計について
  12. 機械語駆動式 関数電卓を作ろう!
  13. 機械語駆動式 関数電卓を作ろう! 解答編(前半)
  14. 機械語駆動式 関数電卓を作ろう! 解答編(後半)


【仮想ネットワーク実装でTCP/IPを学ぼう】
  1. TCP/IPの基礎と勘所
  2. ネットワークアクセス層の勘所
  3. インターネット層の勘所
  4. トランスポート層の勘所
  5. アプリケーション層の勘所
  6. セキュリティの基礎と仮想ネットワークの仕様
  7. GDI+と独自プロトコルの定義



【並列化】
インテル Parallel Studioを使って並列化プログラミングを試してみた
並列プログラミングの効率的なデバッグを実現する「Parallel Inspector」


【TBBシリーズ】
  1. インテル スレッディング・ビルディング・ブロックの概要
  2. インテルTBBから学ぶループの並列化
  3. スレッドセーフとインテルTBBのコンテナ
  4. インテルTBBのスレッドクラス


【OpenMPシリーズ】
  1. OpenMPの基礎構文
  2. OpenMPの実行時ライブラリと並列ループ
  3. OpenMPのメモリモデルとfork- joinモデル

最近の記事
最近のコメント
月別アーカイブ
カテゴリ
Ada (9)
COBOL (5)
C (9)
C++ (11)
C# (370)
D (25)
Java (8)
Perl (1)
Ruby (14)
PHP (2)
Boo (2)
Cobra (2)
LISP (6)
F# (33)
HTML (0)
XHTML (0)
CSS (0)
XML (0)
XSLT (0)
Scala (4)
WPF (0)
WF (2)
WCF (0)
LINQ (4)
MONO (5)
Linux (0)
MySQL (0)
ブログ内検索
リンク
最近のトラックバック
RSSフィード
ブロとも申請フォーム

この人とブロともになる

QRコード
FC2カウンター