【F#】命令型プログラミングと関数型プログラミング その2

  • 2012.02.21 Tuesday
  • 21:25

今更な事、書きますね。

・命令型プログラミング
・関数型プログラミング

であって

・命令型アプリケーション
・関数型アプリケーション

じゃないですよね。

実に今更なんですけど、気がつきました。

【F#】命令型プログラミングと関数型プログラミング

  • 2012.02.21 Tuesday
  • 20:36

let square x = x * x

// 命令スタイル
let impretiveSum numbers =
    let mutable total = 0
    for i in numbers do
        let x = square i
        total <- total + x
    total

// 関数型プログラミングスタイル
let functionalSum numbers =
    numbers
    |> Seq.map square
    |> Seq.sum

O'REILLY プログラミング F#のP51にこんなコードが書かれていまして、
上が命令型(手続き型)で下が関数型で記述したコードだそうです。

なんかしっくりこないんです。確かにどっちが命令かっていわれれば、間違いなく上なんですけどね。
今までC#とかCとか書いていて、「手続き型プログラミングなんですよ。」って
習い始めになんらかの形で説明をうけて、「そうなのね。」って
そこで思考停止してたみたいです。

関数型がわかってないじゃなくて命令型(手続き型)がわかってないんじゃない。
いや、そもそも何とが型って・・・え!えっと。何をみればわかるんでしょ。
そもそもコードを読む際に、頭の中で、手続き型によみかえてるのかな・・・ 

「概念」とか「考え方」とか「理解の仕方」とか「見かた」とか
他人の頭の中にある何かを、そのまま自分の中で再現するのって難しいですね。

【F#】二冊目かってみた「プログラミングF#」

  • 2012.02.19 Sunday
  • 23:54
評価:
Chris Smith
オライリージャパン
¥ 3,780
(2010-08-26)
コメント:二冊目に最適だと思う。

本屋さんでパラパラとページをめくったら読みやすそうだったので買ってみた。
文法の解説もなくいきなりコードが書かれていたりするので、
F#を知らずにいきなり読むと挫折しそうだが、二冊目としてはちょうど良い感じに見える。

めざせF#ニンジャマスター!

【F#】F#のList.tailはしっぽが長い。

  • 2012.02.19 Sunday
  • 13:30

List.tailと聞いてジャパニーズボブテイルぐらいだと思ってたら、
ほとんどがしっぽだったという。

【F#】cons演算子と@演算子

  • 2012.02.18 Saturday
  • 13:46

cons演算子(::)は一つの要素をリストの先頭に追加する。

> 1::[2;3;4;5;6;];;
val it : int list = [1; 2; 3; 4; 5; 6]
> 2::1::[2;3;4;5;6;];;
val it : int list = [2; 1; 2; 3; 4; 5; 6]

末尾はダメ
> 2::1::[2;3;4;5;6;]::3;;

  2::1::[2;3;4;5;6;]::3;;
  ------^^^^^^^^^^^^


@演算子は、二つのリストを一つに連結する。

> [1;2;3]@[4;5;6];;
val it : int list = [1; 2; 3; 4; 5; 6]

【F#】組から3番目の値を取り出す関数を考えてみた。

  • 2012.02.18 Saturday
  • 02:11
組から一つ目の要素を取り出す関数 fst、2番目の要素を取り出す snd関数がある。
なので三番目の要素を取り出す関数を考えてみた。

 > let third tuple =
    let _, _, x = tuple
    x;;

val third : 'a * 'b * 'c -> 'c

> (1, 2, 3) |> third;;
val it : int = 3

それで気づいた。これって3つの組以外役に立たないじゃんって

fstとsndってすごいなーって思ったて試してみた。

> fst (1, 2, 3);;

  fst (1, 2, 3);;
  -----^^^^^^^

stdin(24,6): error FS0001: 型が一致しません。
    'a * 'b   
という指定が必要ですが、
    'a * 'b * 'c   
が指定されました。タプルには異なる長さの 2 と 3 があります


fstとsndは二つの組にしか対応してなかった・・・ただの勘違いだった。

-------------------------
(追記)
そもそも下記のように簡単にタプルから値を取得できるわけだから関数なんていらないよね・・・

> let first, second, third = (1, 2, 3);;

【F#】floatって

  • 2012.02.18 Saturday
  • 00:41
F#のfloat型ってSystem.Doubleだったのか!?
完全に勘違いしていた。

【F#】・・・本格的に分からなくなってきた。

  • 2012.02.16 Thursday
  • 23:37
本格的に分からなくなってきたので本を読み直そう・・・。
まあ時間はたっぷりあるし。

【F#】おもしろそうなやつ出てきた参照セル

  • 2012.02.15 Wednesday
  • 22:36

「参照」っていう単語はいつも私を混乱させます。
結局、それって何?って思ってしまうんです。

AがBを参照する。
Aのことを「参照」と呼ぶのか。
「参照する」ことを「参照」と呼ぶのか。
それともAとBの関係を「参照」と呼ぶのか。

あまたが大混乱してしまいます。
でも使ってみると、これが楽しい。

> let a = ref 10;;

val a : int ref = {contents = 10;}

> let a = ref a;;

val a : int ref ref = {contents = {contents = 10;};}

> let a = ref a;;

val a : int ref ref ref = {contents = {contents = {contents = 10;};};}

> let a = ref a;;

val a : int ref ref ref ref =
  {contents = {contents = {contents = {contents = 10;};};};}

> !(!(!(!a)));;
val it : int = 10

aっていう識別子がついた参照を、さらにaという識別子でシャドーイング(?)させて、どんどん参照の参照ができていくのが分かります。

おもしろい事ができそう。


そもそもF#の参照セルというのはcontentsっていうわかりやすいmutableな識別子がついていて、これも面白いな〜って思いました。

【F#】読めたらうれしいねF# その2

  • 2012.02.14 Tuesday
  • 22:42
let addAbs x y = abs x + abs y
(fun f y -> (fun x -> f x y)) addAbs -2
上の式が
fun x -> addAbs x -2
なかなか頭にしっくりこない。

と前回、投稿しましたが、「これは絵で書いたら理解しやすいんじゃないか?」って思ったのでトンチ絵書いてみました。





いや〜〜わかりやすい!

わかりやすいですね!

めっちゃわかりやすい「自画自賛」ですね。




っていうか、あんたこれが分からなかったのって突っ込まれそうですが・・・すみません。最初、これが全くわかりませんでした。もう記号の羅列にしか見えなかった(涙)F#超入門書みたいな感じで、絵が沢山書かれていて、そんな説明なんていらんよって突っ込まれるぐらいのレベルの説明まであって、懇切丁寧なプログラミング初心者を対象とした本があれば良いんですが・・・。プログラミング初心者ではないと自負してますが、買って読まさせていただきます。

calendar

S M T W T F S
      1
2345678
9101112131415
16171819202122
23242526272829
30      
<< September 2018 >>

あわせて読みたい

あわせて読みたいブログパーツ

selected entries

categories

archives

recent comment

  • 【キーボード】6年前のRealForceを復活させることはできる!?その3
    art55 (05/22)
  • 【キーボード】6年前のRealForceを復活させることはできる!?その3
    分解大好き (05/18)
  • 【.NET Framework 4.5】 IListがIReadOnlyListを継承してない理由。
    art55 (02/04)
  • 【.NET Framework 4.5】 IListがIReadOnlyListを継承してない理由。
    Gen (02/04)
  • 【キーボード】RealForce が壊れて帰ってきた。
    art55 (04/29)
  • 【.NET Framework 4.5】 IListがIReadOnlyListを継承してない理由。
    art55 (02/23)
  • 【.NET Framework 4.5】 IListがIReadOnlyListを継承してない理由。
    かるあ (02/22)
  • 【C#】Dictionaryの実装・データ構造・アルゴリズムを観察する。
    art55 (01/16)
  • 【C#】Dictionaryの実装・データ構造・アルゴリズムを観察する。
    karuakun (01/16)
  • 【NetOffice】【Excel】死なないExcelプロセスをKillする。
    art55 (12/05)

recent trackback

recommend

recommend

recommend

C#プログラマのための.NETアプリケーション最適化技法 (Programmer's SELECTION)
C#プログラマのための.NETアプリケーション最適化技法 (Programmer's SELECTION) (JUGEMレビュー »)
Sasha Goldshtein,Dima Zurbalev,Ido Flatow,サシャ・ゴルドシュタイン,ディマ・ズルバレフ,イド・フラトー

recommend

ろんりと集合
ろんりと集合 (JUGEMレビュー »)
中内 伸光
とてもわかりやすいです。

recommend

recommend

シャノン・ノイマン・ディジタル世界
シャノン・ノイマン・ディジタル世界 (JUGEMレビュー »)
市川 忠男
4章がリレーショナルデータベースな内容になってます。ページ数があまりありませんが、ポイントがものすごく的確にまとまっていて、感動します。

recommend

recommend

東プレ Realforce91UBK-S 静音キーボード 静電容量無接点方式 変荷重 ブラック NG01BS
東プレ Realforce91UBK-S 静音キーボード 静電容量無接点方式 変荷重 ブラック NG01BS (JUGEMレビュー »)

テンキーレス、静音のRealForce91UBK-S。スコスコ感がたまらなく気持ちいいです。家と会社で2台持ってます。

recommend

recommend

プログラミング.NET Framework 第4版 (プログラミングシリーズ)
プログラミング.NET Framework 第4版 (プログラミングシリーズ) (JUGEMレビュー »)
Jeffrey Richter
発売予定美 2013年10月10日。.NET Frameworkとお付き合いする人のバイブルですね。

recommend

recommend

キャット・シッターの君に。
キャット・シッターの君に。 (JUGEMレビュー »)
喜多嶋 隆
私のイラストレータデビュー本です。

recommend

Essential .NET ― 共通言語ランタイムの本質
Essential .NET ― 共通言語ランタイムの本質 (JUGEMレビュー »)
ドン・ボックス,クリス・セルズ,Don Box,Chris Sells,吉松 史彰

links

profile

search this site.

others

mobile

qrcode

powered

無料ブログ作成サービス JUGEM