前スレ
http://toro.2ch.net/test/read.cgi/tech/1320743217/
探検
【アンチ】関数型言語は使えない【玩具】 2
■ このスレッドは過去ログ倉庫に格納されています
2012/02/28(火) 20:45:47.95
414デフォルトの名無しさん
2013/06/20(木) 20:25:36.29 たいていは通用範囲がローカルなかたちで名前をつけることができるから問題ない
415デフォルトの名無しさん
2013/06/20(木) 21:24:23.61 >>413
>関数型言語ってループは末尾再帰で書くんですよね?
関数型言語の原理、というか計算モデルという視点であれば、その認識は正しい
>それってループするために関数定義の為に名前を消費する必要があるってことですか?
関数型言語では(数値や文字列と同様に)関数そのものも式の要素になる
言い換えると、関数の引数として関数を渡したり、関数の戻り値も関数として定義でき、
こういった関数の使い方は「高階関数」と呼ばれている
一般に関数型言語には、この高階関数を応用したライブラリが標準で付属しており、
このライブラリ関数を利用する事によって、多くのケースでは関数再帰を意識せず
(手続き型言語における)ループ処理をプログラミングできるし、無駄な名前の消費も無い
高階関数の代表例にはリスト処理を提供する List.map, List.filter, List.fold があり、
たとえば Ruby では以下に示すようにモジュール Enumerable のメソッドとして定義されている
・List.map -> Enumuerable#map
・List.filter -> Enumerble#select, Enumerable#reject
・List.fold -> Enumerble#inject
>関数型言語ってループは末尾再帰で書くんですよね?
関数型言語の原理、というか計算モデルという視点であれば、その認識は正しい
>それってループするために関数定義の為に名前を消費する必要があるってことですか?
関数型言語では(数値や文字列と同様に)関数そのものも式の要素になる
言い換えると、関数の引数として関数を渡したり、関数の戻り値も関数として定義でき、
こういった関数の使い方は「高階関数」と呼ばれている
一般に関数型言語には、この高階関数を応用したライブラリが標準で付属しており、
このライブラリ関数を利用する事によって、多くのケースでは関数再帰を意識せず
(手続き型言語における)ループ処理をプログラミングできるし、無駄な名前の消費も無い
高階関数の代表例にはリスト処理を提供する List.map, List.filter, List.fold があり、
たとえば Ruby では以下に示すようにモジュール Enumerable のメソッドとして定義されている
・List.map -> Enumuerable#map
・List.filter -> Enumerble#select, Enumerable#reject
・List.fold -> Enumerble#inject
416デフォルトの名無しさん
2013/06/20(木) 21:58:56.06 ある集合の各要素へ、ある関数を適用した場合の、新たな集合を知るのがループの目的であるならば、
最初の集合と適用する関数を記述するだけで結果の集合を得られるので、他の言語のように何をするにもforループを書く的な書き方はあまりしない。
最初の集合と適用する関数を記述するだけで結果の集合を得られるので、他の言語のように何をするにもforループを書く的な書き方はあまりしない。
417415
2013/06/20(木) 22:09:07.44 >>415では肝心な事を書き忘れていたので追記する
>>413も知っているように関数には名前を付けることができて、
これは「関数を定義する」と呼ばれることが多い
同時に、関数型言語には「無名関数」と呼ばれる概念があり、
「ラムダ式」あるいは「関数式」とも呼ばれる
つまり、(>>415で述べた)高階関数へ渡す関数や戻り値としての関数には
この無名関数を使えばいいから、無駄な名前を消費せずにプログラミングできることになる
たとえば Standard ML という関数型言語では、無名関数の文法は「fn <引数> => 式」であり、
その無名関数をリスト処理関数 map へ渡すサンプルコードは以下の様になる
- map (fn x => x + 1) [1, 2, 3];
> val it = [2, 3, 4] : int list
Ruby であれば、以下のように書く
irb(main):001:0> [1, 2, 3].map { |x| x + 1 }
=> [2, 3, 4]
>>413も知っているように関数には名前を付けることができて、
これは「関数を定義する」と呼ばれることが多い
同時に、関数型言語には「無名関数」と呼ばれる概念があり、
「ラムダ式」あるいは「関数式」とも呼ばれる
つまり、(>>415で述べた)高階関数へ渡す関数や戻り値としての関数には
この無名関数を使えばいいから、無駄な名前を消費せずにプログラミングできることになる
たとえば Standard ML という関数型言語では、無名関数の文法は「fn <引数> => 式」であり、
その無名関数をリスト処理関数 map へ渡すサンプルコードは以下の様になる
- map (fn x => x + 1) [1, 2, 3];
> val it = [2, 3, 4] : int list
Ruby であれば、以下のように書く
irb(main):001:0> [1, 2, 3].map { |x| x + 1 }
=> [2, 3, 4]
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「偽サッチャー」「自滅的」「時代遅れ」 高市首相の経済政策を海外メディアが酷評 [蚤の市★]
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★2 [蚤の市★]
- 【ド軍】山本由伸、WBC出場を決断!ドジャースが本人の意向を尊重、佐々木朗希はチームが故障歴を懸念で不参加 [鉄チーズ烏★]
- 米大統領報道官「日本と強固な同盟維持、中国とも協力」 [少考さん★]
- JA全農が「新おこめ券」…来年9月末の有効期限を新設、必要経費のみ上乗せ ★2 [蚤の市★]
- 【映画】『スーパーマン』のDNAを引き継ぐZ世代の最強ヒロイン!『スーパーガール』 2026年夏に公開予定 予告編も公開 [冬月記者★]
- 今年の漢字、きょう発表😉 [583597859]
- 女の子集合!
- 中国人、超ド正論。「チベットやウイグルに住んでるのはチベット族やウイグル族だが、アイヌから奪った土地に住んでる日本人こそ侵略者」 [314039747]
- 百合営業してるアイドル「これは営業だから…んっクチュクチュ」←これ
- (´・ω・`)ニュー速VIPのみんなへ
- ひまでんぼ
