Swift スレで関数型プログラミングについてレスしたけど、
こちらのスレとも関連するのでメモとしてカキコしとく
http://peace.2ch.net/test/read.cgi/tech/1415860741/153
--
Swift や Ruby を含む多くの言語では常識であるけど Python では異なるものとして、
関数型言語に由来した(無名関数やラムダ式とも呼ばれる)クロージャがある
たとえば "The Swift Programming Language" の "Closure" の章にある map メソッドを使った
サンプルコードは、Ruby でも同じスタイルの良く似たコードで書き直せる:
http://ideone.com/TsGD6B
これは Ruby だけでなく、JavaScript でも同じ
Swift や Ruby と比べて構文が簡潔な JavaScript ではいくらか冗長にはなるけれど、
何の苦もなく Swift と同じスタイルで書き直せる:
http://ideone.com/74oNVU
同様に、「あるテーブルから特定の行だけを抽出し、加工して、集計する処理」は、
Swift だと table.filter { .... }.map { .... }.reduce { .... } とメソッドを連結(チェイン)させた式で書ける
これは Ruby なら table.select { .... }.map { .... }.inject { .... } と書き直せる
ここで、クロージャ内の ..... の部分には、上記のサンプルのように「任意の文(statements)が書ける」
もしかすると、いやこんなの高階関数のプログラミングを知っている人なら当たり前だろ、と感じるかもしれない
ところが Python だけはクロージャの本体に(任意の文ではなく)「式(expression)しか書けない」:
http://ideone.com/tDaDkL # --> Syntax Error になってしまう
だから、他の言語のクロージャに相当するコードを(名前のある)関数としてわざわざ宣言しなければならない:
http://ideone.com/R7twCQ
結果として、Python は手続き型プログラミングであれば簡潔で可読性に優れたコードが書けるスクリプト言語だけれど、
関数型プログラミングには適さず、こうした関数型プログラミングは推奨されていないらしい(これを "酸っぱい葡萄" と言ふ)
http://peace.2ch.net/test/read.cgi/tech/1345123070/70-71
これが Swift や Ruby 等と比較すると、関数型プログラミングで Python が劣る典型的な一例になる
LLにおける関数型プログラミング
■ このスレッドは過去ログ倉庫に格納されています
11028
2014/12/09(火) 23:38:42.78ID:7jn1Y2FE■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【速報】GMO不正アクセス 攻撃者が顧客の個人情報の一部をネットに掲載 [Hitzeschleier★]
- 【速報】GMO、顧客にパソコン電源オフを要請 27日正午に攻撃との脅迫受け ★5 [おっさん友の会★]
- 【速報】GMO、ランサム被害にあった顧客に新しいPC提供へ [Hitzeschleier★]
- 【訃報】漫画家・ちばてつやさん死去 87歳 [少考さん★]
- 【速報】GMO、顧客にパソコン電源オフを要請 27日正午に攻撃との脅迫受け ★6 [おっさん友の会★]
- 【速報】GMO不正アクセス 攻撃者が顧客の個人情報の一部をネットに公開「毎日正午に順次公開」★2 [Hitzeschleier★]
- 【高市悲報】GMO開示祭り、始まる★2 [667773354]
- 【高市悲報】識者「戦争?勝てますよ😤シーレーンさえ守りきれば。西側諸国が黙ってない」😳 [359965264]
- 【高市朗報】GMO顧客、毎日12時に個人情報公開と引き換えに追加見舞金が貰えるガチャ開催 [663382246]
- スーパーアキダイ社長 国会に参考人として呼び出される [931948549]
- 【悲報】GMO、ハッカー集団えげつない、人生終了する人続出か? [383063292]
- GMO、公開された情報を拡散する「悪質性の高い情報拡散者」に対して法的措置を行うと発表 [256556981]