F#入門
というわけで、win7を起動して導入。
どのように導入したらよいかわからなかったので、他のサイトを参考にして進めさせていただきました。
ttp://winterradish.web.fc2.com/10/50compiler.html
をみながら。
①Visual studio shell の integratedをインストール
②F#本体をインストール。
まずはインタプリタが動くかどうか。
②でインストールしたフォルダないのbinフォルダにパスを通してからコマンドプロンプトを起動。
fsi
と打つと、無事インタプリタが起動しました。
次に、コンパイラが動くかどうか。
visual studio 2010を立ち上げます。
なお、私はvisual C++ 2008 express editionを同PCで使用していますが、それに関しては何の問題もないようです。
ただ、ライセンス登録は、C++のもので自動的に行ってくれているよう。
ここらへんがMicrosoftは親切
さっそく、C++ express edition同様、新規プロジェクトを作成。
日本語がソースコード内で何の処理をせずとも扱えるのは便利。
printfn "This is test!"
Ctrl+Shift+B でビルド、
Ctrl+F5 で実行です。
無事動作確認終了!
文法が、同じ関数型とはいえHaskellと大分異なる印象を受けたので少しずつ慣れることにしましょう。
まずはHaskellでいうところの、zipWith関数を書いた。
let rec zipWith f xs ys = if xs = [] || ys = [] then [] else f (List.head xs) (List.head ys) :: zipWith f (List.tail xs) (List.tail ys);; zipWith (+) [1..4] [5..8] |> printfn "%A"
結果は[6,8,10,12]
予想どおりですね
Haskellでは
Prelude> let fibo = 1:1:zipWith (+) fibo (tail fibo) Prelude> take 10 fibo [1,1,2,3,5,8,13,21,34,55]
のようなことができるので、F#も出来るだろうと思って同様に
let rec fibo = 1::1:: zipWith (+) fibo (List.tail fibo);;
のようにしたけど見事にコンパイルを通らない.....
自身の定義に自身を使うのはできないよと言われています。
再帰的な呼び出しとは違うのか。
.Netクラスライブラリ利用可だし、Visualなもの作るならHaskellよりは確実に楽でしょう。
ただ、名前空間あったり、再帰関数書くときrecを書かないといけなかったり、可読性ではHaskellには劣ると思われる。
慣れの問題もあるでしょうが笑
ちょっと色々なサイトでF#の使用例覗いたけれど、エディタだったり画像だったり。GUIには強いイメージ。
そういえばC#でのバイトをしている友人がいるけれど、たしかC#も.Netプラットフォーム利用できるはず.....
.Netって無駄に多機能で汚いイメージが強くて触りたいとも思わなかったけれど、ちゃんと使えれば大きな武器になりそうです。
Python同様、少しずつ学習していきます