Mercurial > hg > Papers > 2014 > toma-master
view outline/Haskell.mm @ 4:f1b0236b1ffa
add mindmap about haskell
author | Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 28 Dec 2013 11:59:35 +0900 |
parents | |
children |
line wrap: on
line source
<map version="1.0.0"> <!-- To view this file, download free mind mapping software FreeMind from http://freemind.sourceforge.net --> <node CREATED="1388191549686" ID="ID_761120414" MODIFIED="1388196032742" TEXT="Haskell"> <node CREATED="1388191560211" ID="ID_978703229" MODIFIED="1388191714907" POSITION="right" TEXT="純粋関数型プログラミング言語"> <node CREATED="1388191573197" ID="ID_915687896" MODIFIED="1388191599102" TEXT="関数型プログラミングを少しかじってみるといった安易な考えは許されない"> <node CREATED="1388191665922" ID="ID_187141331" MODIFIED="1388191690904" TEXT="命令型のように書くという逃げ道はない"/> </node> <node CREATED="1388191612947" ID="ID_922918297" MODIFIED="1388191637688" TEXT="I/O 処理や状態を蓄積するような処理は難しい"/> <node CREATED="1388193977895" ID="ID_793804327" MODIFIED="1388193992050" TEXT="純粋であるということはHaskellの最大の特徴"/> <node CREATED="1388194030384" ID="ID_494675146" MODIFIED="1388194032437" TEXT="強み"> <node CREATED="1388194032981" ID="ID_1950561240" MODIFIED="1388194043125" TEXT="予測可能性と論理のシンプルさ"/> <node CREATED="1388194059449" ID="ID_1482032903" MODIFIED="1388194090974" TEXT="正しさの証明を命令型言語と比べてはるかに簡単に行える"/> </node> <node CREATED="1388192151261" ID="ID_1130362062" MODIFIED="1388192160167" TEXT="副作用がない"> <node CREATED="1388192160167" ID="ID_205388722" MODIFIED="1388192421664" TEXT="その代わり関数は副作用を返すことができる"> <node CREATED="1388192173468" ID="ID_1514331864" MODIFIED="1388192182920" TEXT="この副作用は後で実行できる"/> <node CREATED="1388192186228" ID="ID_906297479" MODIFIED="1388192192529" TEXT="Monad"/> </node> </node> </node> <node CREATED="1388191775796" ID="ID_319286970" MODIFIED="1388191922132" POSITION="right" TEXT="遅延評価"> <node CREATED="1388191922133" ID="ID_1274294213" MODIFIED="1388191944123" TEXT="遅延評価を重視し、最高の関数型言語の概念を組み合わせる"/> <node CREATED="1388194934218" ID="ID_678045179" MODIFIED="1388194942178" TEXT="無限リストを返す関数を作成できる"> <node CREATED="1388194953513" ID="ID_1088503319" MODIFIED="1388194976257" TEXT="通常は再帰を制限する他の関数(takeなど)と組み合わせて使う"/> </node> </node> <node CREATED="1388195331103" ID="ID_1902897472" MODIFIED="1388196942207" POSITION="right" TEXT="型"> <node CREATED="1388191950888" ID="ID_1998720784" MODIFIED="1388195288618" TEXT="強い静的型付け"> <node CREATED="1388191960916" ID="ID_12426767" MODIFIED="1388191967782" TEXT="Scalaと同様"/> <node CREATED="1388191968473" ID="ID_331989444" MODIFIED="1388191985519" TEXT="型推論により適切な型が導出される"/> <node CREATED="1388191988857" ID="ID_1520421475" MODIFIED="1388192011701" TEXT="すべての関数型言語のなかで最も効果的な型システムのひとつであると広く認められている"/> <node CREATED="1388192016354" ID="ID_1015086874" MODIFIED="1388192039680" TEXT="型システムにより、ポリモーフィズムと非常に明解な設計が可能"/> <node CREATED="1388195293007" ID="ID_519172422" MODIFIED="1388195314623" TEXT="型というのは関数型プログラミングのUML(統一モデル言語) by Simon"/> </node> <node CREATED="1388192815483" ID="ID_236722329" MODIFIED="1388192819088" TEXT="型推論"> <node CREATED="1388192819089" ID="ID_1424940966" MODIFIED="1388192823305" TEXT="型変数"> <node CREATED="1388192832532" ID="ID_809946050" MODIFIED="1388192842095" TEXT="a -> a"/> <node CREATED="1388192843193" ID="ID_1618402398" MODIFIED="1388192863239" TEXT="ある型 a の引数を1つとり、同じ型の値を返す"/> <node CREATED="1388192940523" ID="ID_398292145" MODIFIED="1388192949250" TEXT="総称型、ジェネリックス、テンプレート"/> </node> <node CREATED="1388196089188" ID="ID_1761019975" MODIFIED="1388196094421" TEXT="プログラマの負担を軽減"/> </node> <node CREATED="1388192321753" ID="ID_155151425" MODIFIED="1388192330089" TEXT="プリミティブ型"> <node CREATED="1388192330089" ID="ID_1800826903" MODIFIED="1388192331559" TEXT="数値"/> <node CREATED="1388192334216" ID="ID_1887064291" MODIFIED="1388192336694" TEXT="文字データ"/> <node CREATED="1388192342264" ID="ID_24847132" MODIFIED="1388192346310" TEXT="ブール値"/> </node> <node CREATED="1388195409572" ID="ID_1563312214" MODIFIED="1388196138060" TEXT="型システム"> <node CREATED="1388196114027" ID="ID_1424372596" MODIFIED="1388196122997" TEXT="柔軟で豊か"/> <node CREATED="1388195959110" ID="ID_1837865378" MODIFIED="1388195969921" TEXT="プログラマの意図を推論"/> <node CREATED="1388195970320" ID="ID_1494209419" MODIFIED="1388195987898" TEXT="必要な時以外、プログラマが型システムを意識することはない"/> <node CREATED="1388195990425" ID="ID_407252193" MODIFIED="1388196000690" TEXT="関数を組み立てる時のサニティチェックにもなる"/> <node CREATED="1388196142787" ID="ID_1412271557" MODIFIED="1388196164286" TEXT="微妙なプログラミングエラーでさえ捕捉する"/> <node CREATED="1388196175125" ID="ID_1483410856" MODIFIED="1388196191190" TEXT="見かけの違う同じ型を同じものとして扱える"/> </node> <node CREATED="1388196233493" ID="ID_680545485" MODIFIED="1388196239192" TEXT="ユーザ定義の型"> <node CREATED="1388196240054" ID="ID_854169425" MODIFIED="1388196251406" TEXT="data キーワードを使う"/> <node CREATED="1388196252398" ID="ID_1594925266" MODIFIED="1388196418578" TEXT="data Boolean = True | False"> <node CREATED="1388196279012" ID="ID_297593331" MODIFIED="1388196305602" TEXT="Booleanの型はTrueもしくはFalseをとるという意味"/> </node> <node CREATED="1388196419610" ID="ID_1269508509" MODIFIED="1388196433819" TEXT="多相的なデータ型も作れる"> <node CREATED="1388196455819" ID="ID_694208754" MODIFIED="1388196462701" TEXT="型変数を用いる"/> <node CREATED="1388196463339" ID="ID_1965625107" MODIFIED="1388196482712" TEXT="data Triplet a = Trio a a a"/> </node> <node CREATED="1388196447715" ID="ID_1852424646" MODIFIED="1388196454341" TEXT="再帰的なデータ型も作れる"> <node CREATED="1388196518962" ID="ID_1270200410" MODIFIED="1388196549429" TEXT="data Tree a = Children [Tree a] | Leaf a"/> <node CREATED="1388196600996" ID="ID_294122218" MODIFIED="1388196623011" TEXT="作業に必要な部分はマッチングで引き剥がせる"/> <node CREATED="1388196705464" ID="ID_431627909" MODIFIED="1388196721538" TEXT="型構成子と関数を結びつけることができる"/> </node> </node> <node CREATED="1388192586606" ID="ID_1661727876" MODIFIED="1388196337892" TEXT="クラス"> <node CREATED="1388192590414" ID="ID_40102052" MODIFIED="1388192597404" TEXT="同種の型の集まりを記述したもの"/> <node CREATED="1388196784234" ID="ID_1347847371" MODIFIED="1388196799868" TEXT="入力に応じて、どの演算が実行可能かを定義したもの"/> <node CREATED="1388196853717" ID="ID_700416155" MODIFIED="1388196877646" TEXT="ある型が==と/=の両方をサポートしていれば、その型はEqのインスタンス"/> <node CREATED="1388196886428" ID="ID_203441429" MODIFIED="1388196891535" TEXT="継承もある"> <node CREATED="1388196891820" ID="ID_319547505" MODIFIED="1388196907415" TEXT="NumクラスにはFractionalとRealの2つのサブクラスがある"/> </node> </node> </node> <node CREATED="1388196942878" ID="ID_1736580882" MODIFIED="1388196944824" POSITION="right" TEXT="モナド"> <node CREATED="1388197079076" ID="ID_291240001" MODIFIED="1388197090779" TEXT="特別なやり方で複数の関数を組み合わせるための方法"/> <node CREATED="1388197127713" ID="ID_1871954236" MODIFIED="1388197133357" TEXT="プログラムの状態をシュミレートできる"/> <node CREATED="1388197135250" ID="ID_1015183182" MODIFIED="1388197137833" TEXT="do記法"> <node CREATED="1388197139281" ID="ID_905949397" MODIFIED="1388197146140" TEXT="命令形式でプログラムをかける"/> <node CREATED="1388197146690" ID="ID_484893744" MODIFIED="1388197153460" TEXT="モナドに依存している"/> <node CREATED="1388197900376" ID="ID_957894405" MODIFIED="1388197905986" TEXT="シンタックスシュガー"/> </node> <node CREATED="1388197176426" ID="ID_1604134932" MODIFIED="1388197179110" TEXT="構成要素"> <node CREATED="1388197182868" ID="ID_935631735" MODIFIED="1388197208798" TEXT="コンテナとなるものの型を変数にとる型構成子"> <node CREATED="1388197270805" ID="ID_1577327561" MODIFIED="1388197283167" TEXT="単純な変数やリストなど値を保持できればなんでもよい"/> <node CREATED="1388197288173" ID="ID_1512646039" MODIFIED="1388197297058" TEXT="このコンテナに関数を収める"/> <node CREATED="1388197298029" ID="ID_502539509" MODIFIED="1388197309095" TEXT="どのコンテナを選ぶかは、モナドで実行したいことによって異なる"/> </node> <node CREATED="1388197209507" ID="ID_556935788" MODIFIED="1388197221311" TEXT="return"> <node CREATED="1388197243292" ID="ID_1798052685" MODIFIED="1388197259375" TEXT="関数をラップしてモナドに入れ込む"/> <node CREATED="1388198076389" ID="ID_358292938" MODIFIED="1388198106982" TEXT="関数が返す結果を、do表記で吸収できる整理された形式できれいにパッケージ化する"/> </node> <node CREATED="1388197221964" ID="ID_1151608950" MODIFIED="1388197231325" TEXT=">>= (バインド)"> <node CREATED="1388197231721" ID="ID_1757649779" MODIFIED="1388197240541" TEXT="関数を数珠つなぎにするのに使う"/> </node> </node> <node CREATED="1388197328149" ID="ID_511172839" MODIFIED="1388197334482" TEXT="モナド則"> <node CREATED="1388197334482" ID="ID_800950325" MODIFIED="1388197346811" TEXT="ラップした値はそのまま関数に渡すことができなければならない"> <node CREATED="1388197347838" ID="ID_613341854" MODIFIED="1388197355599" TEXT="return x >>= f = f x"/> </node> <node CREATED="1388197361789" ID="ID_924713803" MODIFIED="1388197380487" TEXT="情報を失うことなく値をアンラップおよびラップできなければならない"> <node CREATED="1388197380790" ID="ID_1267299199" MODIFIED="1388197393439" TEXT="monad >>= return = monad"/> </node> <node CREATED="1388197402260" ID="ID_1320008373" MODIFIED="1388197420123" TEXT="バインドをネストした場合と、それらをシーケンシャルに呼び出した場合とで結果が同じでないといけない"> <node CREATED="1388197421456" ID="ID_1958523937" MODIFIED="1388197434825" TEXT="((m >>= f) >>= g = m >>= (\x -> f x >>= g))"/> </node> <node CREATED="1388197460534" ID="ID_1165160790" MODIFIED="1388197485349" TEXT="これらのルールに従うことによって、情報を失うことなく、有用な変換が可能になる"/> </node> <node CREATED="1388198138111" ID="ID_1452100011" MODIFIED="1388198142658" TEXT="計算戦略"> <node CREATED="1388198142658" ID="ID_1826103085" MODIFIED="1388198152499" TEXT="すべてのモナドには計算戦略が関連付けられている"/> </node> <node CREATED="1388198334850" ID="ID_221112900" MODIFIED="1388198355552" TEXT="エラー処理といった問題も解決できる"/> </node> <node CREATED="1388196953333" ID="ID_548214294" MODIFIED="1388196955367" POSITION="right" TEXT="構文"> <node CREATED="1388192079139" ID="ID_1057953331" MODIFIED="1388192134265" TEXT="パターンマッチングとガード"> <node CREATED="1388193012843" ID="ID_426653622" MODIFIED="1388193030253" TEXT="Erlangと非常によく似ている"/> <node CREATED="1388193082505" ID="ID_64772925" MODIFIED="1388193084239" TEXT="ガード"> <node CREATED="1388193043385" ID="ID_1941211767" MODIFIED="1388193054654" TEXT="ガードは引数の値を制限する条件として使われる"/> <node CREATED="1388193063784" ID="ID_782058446" MODIFIED="1388193073900" TEXT="ガードが満たされると、対応する関数が呼ばれる"/> </node> </node> <node CREATED="1388192359249" ID="ID_648346489" MODIFIED="1388192361707" TEXT="インデント"> <node CREATED="1388192361707" ID="ID_153647941" MODIFIED="1388192373028" TEXT="Haskellではインデントが重要な意味を持つ"/> </node> </node> <node CREATED="1388192616383" ID="ID_44372329" MODIFIED="1388192619669" POSITION="left" TEXT="関数"> <node CREATED="1388192622126" ID="ID_462335353" MODIFIED="1388192634989" TEXT="Haskell プログラミングパラダイム全体の中心"/> <node CREATED="1388192640581" ID="ID_230341105" MODIFIED="1388192693086" TEXT="型宣言と関数宣言の2つからなる"> <node CREATED="1388192694102" ID="ID_390614852" MODIFIED="1388192699351" TEXT="型宣言(省略可能)"> <node CREATED="1388192765801" ID="ID_167444760" MODIFIED="1388192772863" TEXT="Haskellが型を推論する"/> </node> </node> <node CREATED="1388192456569" ID="ID_592394301" MODIFIED="1388192534088" TEXT="ifは関数"> <node CREATED="1388192472788" ID="ID_1308755482" MODIFIED="1388192482650" TEXT="関数なので値を返す"/> <node CREATED="1388192536853" ID="ID_950199424" MODIFIED="1388192540226" TEXT="制御構文ではない"/> <node CREATED="1388192542349" ID="ID_1688793013" MODIFIED="1388192549572" TEXT="厳密にブール型の値を取る"/> </node> <node CREATED="1388192957214" ID="ID_1660024168" MODIFIED="1388192959532" TEXT="再帰"> <node CREATED="1388192962692" ID="ID_374339828" MODIFIED="1388193010069" TEXT="関数は自分自身を呼び出すことができる"/> <node CREATED="1388193110031" ID="ID_339531475" MODIFIED="1388193204975" TEXT="末尾再帰最適化によって再帰を効率的に処理"/> </node> <node CREATED="1388194121643" ID="ID_1537577893" MODIFIED="1388194217661" TEXT="高階関数"> <node CREATED="1388194135965" ID="ID_1977575106" MODIFIED="1388194148080" TEXT="Haskellは高階関数という概念に大きく依存している"/> <node CREATED="1388194427671" ID="ID_449688816" MODIFIED="1388194444743" TEXT="関数を引数にしたり、返り値とできる"/> <node CREATED="1388194453095" ID="ID_203165427" MODIFIED="1388194461237" TEXT="foldl1 (+) [1..3]"> <node CREATED="1388194462548" ID="ID_771520249" MODIFIED="1388194470206" TEXT="2引数関数を渡したりなど"/> </node> <node CREATED="1388194218204" ID="ID_691116695" MODIFIED="1388194222042" TEXT="無名関数"> <node CREATED="1388194222769" ID="ID_990686685" MODIFIED="1388194239984" TEXT="(\x -> x + x)"/> <node CREATED="1388194243967" ID="ID_1342478339" MODIFIED="1388194250083" TEXT="非常に簡単に書ける"/> <node CREATED="1388194250330" ID="ID_501383481" MODIFIED="1388194264171" TEXT="他の関数と組み合わせると非常に強力な道具になる"> <node CREATED="1388194280235" ID="ID_1018312575" MODIFIED="1388194321071" TEXT="map (\x -> x * x) [1, 2, 3]"/> <node CREATED="1388194338291" ID="ID_167755328" MODIFIED="1388194379658" TEXT="foldl (\x carryOver -> carryOver + x) 0 [1 .. 10]"/> </node> </node> </node> <node CREATED="1388193333412" ID="ID_821745655" MODIFIED="1388195170526" TEXT="関数合成"> <node CREATED="1388193344032" ID="ID_1459168288" MODIFIED="1388193354621" TEXT="ある関数の結果を別の関数に渡して関数を繋げる"/> <node CREATED="1388193385743" ID="ID_165220020" MODIFIED="1388193394869" TEXT="second = head . tail"/> <node CREATED="1388193396190" ID="ID_458882782" MODIFIED="1388193427781" TEXT="second 1st = head (tail 1st)"/> </node> <node CREATED="1388194488160" ID="ID_1699504924" MODIFIED="1388194612964" TEXT="部分適用関数とカリー化"> <node CREATED="1388194659027" ID="ID_1236045206" MODIFIED="1388194680397" TEXT="Haskellのすべての関数は1つの引数を取る"/> <node CREATED="1388194720845" ID="ID_337695165" MODIFIED="1388194724178" TEXT="部分適用"> <node CREATED="1388194724178" ID="ID_1708202107" MODIFIED="1388194734753" TEXT="全部ではなく一部の引数をバインドできる"/> <node CREATED="1388194817533" ID="ID_946235972" MODIFIED="1388194841647" TEXT="fun 2 4とあるとき、(fun 2) 4を計算している"/> <node CREATED="1388194843503" ID="ID_731085631" MODIFIED="1388194882673" TEXT="1引数をとる関数を返すということを繰り返す"> <node CREATED="1388194884080" ID="ID_1363343937" MODIFIED="1388194891985" TEXT="カリー化とよばれる"/> <node CREATED="1388194901407" ID="ID_959060185" MODIFIED="1388194918449" TEXT="Haskellで複数の引数をとる関数は、カリー化されたものとして定義"/> </node> </node> </node> </node> <node CREATED="1388196043512" ID="ID_1924337701" MODIFIED="1388196046093" POSITION="left" TEXT="データ構造"> <node CREATED="1388193148858" ID="ID_1784821574" MODIFIED="1388193168988" TEXT="タプル"> <node CREATED="1388193169531" ID="ID_1184873523" MODIFIED="1388193216458" TEXT="固定数項目のコレクション"/> <node CREATED="1388193218188" ID="ID_1479563753" MODIFIED="1388193226115" TEXT="(a, b)"/> </node> <node CREATED="1388193458081" ID="ID_152556833" MODIFIED="1388193584146" TEXT="リスト"> <node CREATED="1388193465378" ID="ID_525945607" MODIFIED="1388193485384" TEXT="同じ型のコレクション"/> <node CREATED="1388193486040" ID="ID_1553817693" MODIFIED="1388193490661" TEXT="[1,2,3,4]"/> <node CREATED="1388193588148" ID="ID_1455548649" MODIFIED="1388193626484" TEXT="再帰"> <node CREATED="1388193626484" ID="ID_720681161" MODIFIED="1388193649780" TEXT=":演算子を利用して分解したり構築したりできる"/> </node> <node CREATED="1388193673182" ID="ID_374514881" MODIFIED="1388193677404" TEXT="範囲と合成"> <node CREATED="1388193677813" ID="ID_765253512" MODIFIED="1388193684178" TEXT="[1..4]"/> <node CREATED="1388193693195" ID="ID_89729597" MODIFIED="1388193699668" TEXT="[10,8..4]"/> </node> <node CREATED="1388192135076" ID="ID_241254953" MODIFIED="1388192141298" TEXT="リスト内包表記"> <node CREATED="1388193731684" ID="ID_503290632" MODIFIED="1388193760811" TEXT="[x * 2 | x <- [1, 2, 3]]"/> <node CREATED="1388193775622" ID="ID_761909827" MODIFIED="1388193792029" TEXT="リストを迅速に作成および変換するための道具"/> </node> </node> </node> <node CREATED="1388198507600" ID="ID_1980023992" MODIFIED="1388198510086" POSITION="left" TEXT="長所"> <node CREATED="1388198510592" ID="ID_1620838359" MODIFIED="1388198513122" TEXT="型システム"> <node CREATED="1388198573526" ID="ID_1634267422" MODIFIED="1388198586766" TEXT="必要なときに役に立ち、不要なときにでしゃばったりしない"/> <node CREATED="1388198593762" ID="ID_1900279003" MODIFIED="1388198628977" TEXT="よくあるエラーからの保護における有用性の向上"> <node CREATED="1388198612821" ID="ID_1931121594" MODIFIED="1388198624358" TEXT="実行時ではなく、コンパイル時にエラーが捕捉できる"/> </node> <node CREATED="1388198629562" ID="ID_159331403" MODIFIED="1388198642736" TEXT="新しい型を新しい動作に非常に容易に関連付けられる"/> <node CREATED="1388198660332" ID="ID_761318788" MODIFIED="1388198682261" TEXT="ユーザは高度な型を1から作ることができる"/> <node CREATED="1388198696179" ID="ID_1778604290" MODIFIED="1388198722825" TEXT="型構成子とクラスを用いて、モナドなどの極めて複雑な型とクラスをたやすくカスタマイズすることができる"/> <node CREATED="1388198727356" ID="ID_1990061190" MODIFIED="1388198745089" TEXT="クラスを使うと、新しいカスタム型の定義に既存のHaskellのライブラリを利用できる"/> </node> <node CREATED="1388198513911" ID="ID_709564549" MODIFIED="1388198516563" TEXT="表現性"> <node CREATED="1388198754129" ID="ID_1194442474" MODIFIED="1388198768173" TEXT="強力な概念をコンパクトに表現するための必要なものがすべてある"/> <node CREATED="1388198784974" ID="ID_223138303" MODIFIED="1388198800946" TEXT="型を作成するデータ型"/> <node CREATED="1388198801582" ID="ID_903661948" MODIFIED="1388198818358" TEXT="過剰なシンタックスを使わずに、正しいデータに正しい関数をバインドする"/> </node> <node CREATED="1388198517512" ID="ID_703151" MODIFIED="1388198528310" TEXT="プログラミングモデルの純粋さ"> <node CREATED="1388198831510" ID="ID_775905368" MODIFIED="1388198845691" TEXT="関数は同じ入力が与えられれば、必ず同じ出力を返す"> <node CREATED="1388198857912" ID="ID_1672621731" MODIFIED="1388198867695" TEXT="プログラムの推論が極めて容易になる"/> <node CREATED="1388198868903" ID="ID_74233713" MODIFIED="1388198878335" TEXT="プログラムが正しいかどうかを証明することも可能"/> </node> <node CREATED="1388198848109" ID="ID_138845763" MODIFIED="1388198945649" TEXT="並行処理などにおいて副作用に依存していることに起因する多くの問題から解放される可能性がある"/> </node> <node CREATED="1388198528776" ID="ID_718777093" MODIFIED="1388198532980" TEXT="遅延セマンティクス"> <node CREATED="1388198959378" ID="ID_710281598" MODIFIED="1388198979186" TEXT="データを処理するための新しい戦略を提供"/> <node CREATED="1388198979863" ID="ID_1198657696" MODIFIED="1388198991038" TEXT="パフォーマンスの高いプログラムを構築できる"/> <node CREATED="1388198991810" ID="ID_140567271" MODIFIED="1388199015329" TEXT="必要なコード行数も他の戦略の数分の1で済むことが多い"/> </node> <node CREATED="1388199044963" ID="ID_1840861486" MODIFIED="1388199052567" TEXT="学界のサポート"> <node CREATED="1388199052567" ID="ID_1553404152" MODIFIED="1388199069923" TEXT="学問分野で研究され使われることで進歩している"/> <node CREATED="1388199071356" ID="ID_1115856286" MODIFIED="1388199080150" TEXT="改良と成長が続いている"/> </node> </node> <node CREATED="1388199018539" ID="ID_1459125988" MODIFIED="1388199039237" POSITION="left" TEXT="短所"> <node CREATED="1388199092404" ID="ID_1167722375" MODIFIED="1388199103387" TEXT="プログラミングモデルの柔軟性の欠如"> <node CREATED="1388199103956" ID="ID_1970134351" MODIFIED="1388199132459" TEXT="他の言語では取るに足らないことを実行するのにモナドを必要とする"/> <node CREATED="1388199133803" ID="ID_863039976" MODIFIED="1388199148996" TEXT="Haskellでは難しいことが簡単になる場合と、簡単なことが難しくなる場合がある"/> <node CREATED="1388199162998" ID="ID_1222688494" MODIFIED="1388199183210" TEXT="手順を追ったアルゴリズムを構築する場合は命令型言語が向いている"/> <node CREATED="1388199184438" ID="ID_835148367" MODIFIED="1388199195412" TEXT="大量のI/O処理やスクリプティングには向いていない"/> <node CREATED="1388199205390" ID="ID_290589428" MODIFIED="1388199230110" TEXT="ある人の目には純粋にみえることも、別の人の目には妥協がない(融通が利かない)"/> </node> <node CREATED="1388199245142" ID="ID_1438312507" MODIFIED="1388199248402" TEXT="コミュニティ"> <node CREATED="1388199248824" ID="ID_1946670526" MODIFIED="1388199269950" TEXT="プログラミングコミュニティの規模が小さい"/> <node CREATED="1388199270991" ID="ID_694504975" MODIFIED="1388199275567" TEXT="コミュニティの資源が少ない"/> </node> <node CREATED="1388199282083" ID="ID_1257035327" MODIFIED="1388199285383" TEXT="学習曲線"> <node CREATED="1388199285648" ID="ID_1312868020" MODIFIED="1388199299230" TEXT="Haskellの理解には高い知性が必要とされる"/> <node CREATED="1388199334017" ID="ID_525275112" MODIFIED="1388199354045" TEXT="モナド、関数のカリー化、型クラス"/> <node CREATED="1388199357250" ID="ID_270190235" MODIFIED="1388199383530" TEXT="概念を習得することによって得られる報酬は最終的にその価値が充分にあるかもしれない"/> <node CREATED="1388199418524" ID="ID_797564342" MODIFIED="1388199436837" TEXT="しかしながら、しっかりとした理論的基礎を備えた強いプログラマでなければ Haskell で成功するチャンスはない."/> <node CREATED="1388199384819" ID="ID_1136035977" MODIFIED="1388199403986" TEXT="学ぶことが多い"/> </node> </node> </node> </map>