勉強会/輪講/Haskell2009
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[勉強会]]
*Programming in Haskell [#ge7b9520]
10月6日(毎週火曜6限)から実施。&br;
場所は研究等ラウンジ(S2教室の隣)を予定&br;
テキスト:Programming in Haskell&br;
参照HP:http://www.cs.nott.ac.uk/~gmh/book.html
----
#contents
**日程 [#r206c704]
|章|内容|ページ|資料(スライド)|担当者(supervisor)|日程|場所|
|第1章|Inroduction|p1-9|#ref(chapter1.pdf)|森田|10/6|北ラウンジ|
|第2章|First steps|p10-16|#ref(chapter2.pdf)|森田|10/6|北ラウンジ|
|第3章|Types and classes|p17-28|#ref(chapter3.pdf)|五十嵐|10/13|北ラウンジ|
|第4章|Defining functions|p30-37|#ref(chapter4.pdf)|吉田|10/13|北ラウンジ|
|第5章|List comprehensions|p38-46|#ref(Chapter5.pdf)|前田(大堀)|10/20|北ラウンジ|
|第6章|Recursive functions|p48-59|#ref(Chapter6.pdf)|伊藤・仁木(大和田)|10/20|北ラウンジ|
|第7章|Higher-order functions|p61-72|#ref(chapter7.pdf)|渡部・脇坂(三留)|10/27|北ラウンジ|
|第8章|Functional parsers|p74-85|#ref(Chapter8.pdf)|古谷・山本(猪狩)|11/10,17|201F|
|第9章|Interactive programs|p87-97|#ref(Chapter9.pdf)|森田|11/24|201F|
|第9.5章|Calculator|||山本・古谷・脇坂|12/1|201F|
|第9.5章|Game of life|||伊藤・渡部・仁木|12/1|201F|
|第10章|Declaring types and classes|p99-114|#ref(Chapter10.pdf)|五十嵐|12/8|201F|
|第11章|The countdown problem|p116-123|#ref(Chapter11.pdf)|吉田|12/8|201F|
|第12章|Lazy evaluation |p124-137|#ref(Chapter12.pdf)|前田|1/12|201-F|
|第13章|Reasoning about programs |p139-154|#ref(Chapter13.pdf)|伊藤・仁木|1/12|201-F|
|---|Appendix ||#ref(ChapterApp.pdf)||||
サーバー上の\\Zxw001\public\Lecture\Haskell\ディレクトリにも置いてあります。
**備考 [#w1bd3298]
奥山研究室の後期の輪講ですが、参加したい方はぜひ!!&br;
スライドは参照HPより各自ダウンロードしてください
**実行環境の構築(2009.10現在) [#j16a9f0f]
Debian系は問題ないと思われるので、Windowsで検証した。
***GHC [#y231605e]
まずはGHCをインストールする(Soralis版の検証求む!)
-[[GHC-10.6.4:http://www.haskell.org/ghc/download_ghc_6_10_4.html]]
上のリンクからwindows版のバイナリをダウンロードし、インストール。
PATHをC:\ghc\ghc-6.10.4\bin;に通しておく。
コマンドプロンプト(cmd.exe)から
win>ghci
でHugsと同等のことができる。
win> ghc --make honi
で"honi.hs"をコンパイルして実行ファイルを作ることができる。
(gcc一式がGHCに同梱されているのだ!)
***Cabal [#le53e407]
CPANのHaskell版である。
下記のファイルをダウンロードする。
-[[HackageDB/Cabal-1.6.0.3:http://hackage.haskell.org/package/Cabal-1.6.0.3]]
-[[HackageDB/HTTP-4000.0.8:http://hackage.haskell.org/package/HTTP-4000.0.8]]
-[[HackageDB/zlib-0.5.2.0:http://hackage.haskell.org/package/zlib-0.5.2.0]]
-[[HackageDB/cabal-install-0.6.2:http://hackage.haskell.org/package/cabal-install-0.6.2]]
展開するとSetup.hs (ものによってはSetup.lhs)が入っているので、
それぞれのディレクトリで、
win>runhaskell Setup.hs configure
win>runhaskell Setup.hs build
win>runhaskell Setup.hs install
とする。Vistaの場合、cmd.exeを管理者権限で実行すること。
最後に
win>cabal update
としてデータベースを更新しておく。
**参考になるサイト [#ne9f24c9]
-[[Hoogle:http://haskell.org/hoogle/]]
-[[のんびりHaskell:http://www.atmarkit.co.jp/fcoding/index/haskell.html]]
-[[本物のプログラマはHaskellを使う :http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248215/]]
-[[Parsec, 高速なコンビネータパーサ :http://www.lab2.kuis.kyoto-u.ac.jp/~hanatani/tmp/Parsec.html]]
-[[Write Yourself a Scheme in 48 Hours:http://jonathan.tang.name/files/scheme_in_48/tutorial/overview.html]]
-[[href:http://i.loveruby.net/ja/projects/href/]]
-[[GHC/Data Parallel Haskell:http://www.haskell.org/haskellwiki/GHC/Data_Parallel_Haskell]]
**chapter08, p.18のExampleの正規表現 in Perl [#i171fb49]
print ">";
$str = <STDIN>;
####### 正規表現によるマッチングのみなら... #######
print "Before:\t".$str."\n";
if($str =~ /\[\d(,\d)*\]/){ ####### 正規表現部分
print "Match:\t".$str."\n";
}else{
print "Not Match:\t[]\n";
}
####### 直接的に変換すると... #######
@str_list = split(//, $str);
$ret="";
$i=0;
if(@str_list[$i] =~ /\[/){
$i++;
if(@str_list[$i] =~ /\d/){
$ret=$ret.@str_list[$i];
$i++;
while(@str_list[$i] =~ /,/ && @str_list[$i+1]=~ /\d/){
$ret=$ret.@str_list[$i+1];
$i+=2;
}
if(@str_list[$i]=~ /\]/){
print "After:\t[(\"".$ret."\"),\"\"]\n";
}else{
print "After:\t[]\n";
}
}else{
print "After:\t[]\n";
}
}else{
print "After:\t[]\n";
}
**[[Monadius解析>勉強会/輪講/Haskell2009/Monadius解析]] [#b6e8ef1a]
-Monadiusのソースコードをやさしく読み解いてみる。
**新規定義・ユーザ定義子の吐かせかた [#sca865f8]
-表示定義用クラス Show
--Showクラスと関数showはC言語のprintf文みたいなものですが、showは出力させたい値の型によって(コマンドライン上の?)出力方法を判断しています.
---Haskellにはそのままでは出力できない型もあるため.
--なので、data子の宣言などで新規に定義した値・関数は新たに「自分はこう出力されたいんだ」という規則をShowに教えてあげなくてはなりません.
-Showへの定義例
--第11章の本文中の関数"exprs"の出力のさせ方.
--オペレータ(演算子)の定義
data Op = Add | Sub | Mul | Div
--式の定義
data Expr = Val Int | App Op Expr Expr
--表示用定義
instance Show Expr where
show (Val a) = show a
show (App o l r) = show l ++ show o ++ show r
instance Show Op where
show Add = "+"
show Sub = "-"
show Mul = "*"
show Div = "/"
--出力例
---入力:(App Mul (App Sub (Val 25) (Val 10)) (App Add (Val 50) (Val 1)) )
---出力:25-10*50+1
--※この出力おかしいんじゃね? priorityどうなってんだよ?
---今回のプログラムも計算は木構造で行うのですが、各ノード内は独立としてそこにpriorityが掛かっているのです.
---つまり出力時に木の「枝」に当たる部分を判断して前後に括弧を吐かせる、なんてことが出来れば出力は正常に
(25-10)*(50+1)
となってくれるはずです.
---いい方法があればコメント欄へ
#comment
終了行:
[[勉強会]]
*Programming in Haskell [#ge7b9520]
10月6日(毎週火曜6限)から実施。&br;
場所は研究等ラウンジ(S2教室の隣)を予定&br;
テキスト:Programming in Haskell&br;
参照HP:http://www.cs.nott.ac.uk/~gmh/book.html
----
#contents
**日程 [#r206c704]
|章|内容|ページ|資料(スライド)|担当者(supervisor)|日程|場所|
|第1章|Inroduction|p1-9|#ref(chapter1.pdf)|森田|10/6|北ラウンジ|
|第2章|First steps|p10-16|#ref(chapter2.pdf)|森田|10/6|北ラウンジ|
|第3章|Types and classes|p17-28|#ref(chapter3.pdf)|五十嵐|10/13|北ラウンジ|
|第4章|Defining functions|p30-37|#ref(chapter4.pdf)|吉田|10/13|北ラウンジ|
|第5章|List comprehensions|p38-46|#ref(Chapter5.pdf)|前田(大堀)|10/20|北ラウンジ|
|第6章|Recursive functions|p48-59|#ref(Chapter6.pdf)|伊藤・仁木(大和田)|10/20|北ラウンジ|
|第7章|Higher-order functions|p61-72|#ref(chapter7.pdf)|渡部・脇坂(三留)|10/27|北ラウンジ|
|第8章|Functional parsers|p74-85|#ref(Chapter8.pdf)|古谷・山本(猪狩)|11/10,17|201F|
|第9章|Interactive programs|p87-97|#ref(Chapter9.pdf)|森田|11/24|201F|
|第9.5章|Calculator|||山本・古谷・脇坂|12/1|201F|
|第9.5章|Game of life|||伊藤・渡部・仁木|12/1|201F|
|第10章|Declaring types and classes|p99-114|#ref(Chapter10.pdf)|五十嵐|12/8|201F|
|第11章|The countdown problem|p116-123|#ref(Chapter11.pdf)|吉田|12/8|201F|
|第12章|Lazy evaluation |p124-137|#ref(Chapter12.pdf)|前田|1/12|201-F|
|第13章|Reasoning about programs |p139-154|#ref(Chapter13.pdf)|伊藤・仁木|1/12|201-F|
|---|Appendix ||#ref(ChapterApp.pdf)||||
サーバー上の\\Zxw001\public\Lecture\Haskell\ディレクトリにも置いてあります。
**備考 [#w1bd3298]
奥山研究室の後期の輪講ですが、参加したい方はぜひ!!&br;
スライドは参照HPより各自ダウンロードしてください
**実行環境の構築(2009.10現在) [#j16a9f0f]
Debian系は問題ないと思われるので、Windowsで検証した。
***GHC [#y231605e]
まずはGHCをインストールする(Soralis版の検証求む!)
-[[GHC-10.6.4:http://www.haskell.org/ghc/download_ghc_6_10_4.html]]
上のリンクからwindows版のバイナリをダウンロードし、インストール。
PATHをC:\ghc\ghc-6.10.4\bin;に通しておく。
コマンドプロンプト(cmd.exe)から
win>ghci
でHugsと同等のことができる。
win> ghc --make honi
で"honi.hs"をコンパイルして実行ファイルを作ることができる。
(gcc一式がGHCに同梱されているのだ!)
***Cabal [#le53e407]
CPANのHaskell版である。
下記のファイルをダウンロードする。
-[[HackageDB/Cabal-1.6.0.3:http://hackage.haskell.org/package/Cabal-1.6.0.3]]
-[[HackageDB/HTTP-4000.0.8:http://hackage.haskell.org/package/HTTP-4000.0.8]]
-[[HackageDB/zlib-0.5.2.0:http://hackage.haskell.org/package/zlib-0.5.2.0]]
-[[HackageDB/cabal-install-0.6.2:http://hackage.haskell.org/package/cabal-install-0.6.2]]
展開するとSetup.hs (ものによってはSetup.lhs)が入っているので、
それぞれのディレクトリで、
win>runhaskell Setup.hs configure
win>runhaskell Setup.hs build
win>runhaskell Setup.hs install
とする。Vistaの場合、cmd.exeを管理者権限で実行すること。
最後に
win>cabal update
としてデータベースを更新しておく。
**参考になるサイト [#ne9f24c9]
-[[Hoogle:http://haskell.org/hoogle/]]
-[[のんびりHaskell:http://www.atmarkit.co.jp/fcoding/index/haskell.html]]
-[[本物のプログラマはHaskellを使う :http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248215/]]
-[[Parsec, 高速なコンビネータパーサ :http://www.lab2.kuis.kyoto-u.ac.jp/~hanatani/tmp/Parsec.html]]
-[[Write Yourself a Scheme in 48 Hours:http://jonathan.tang.name/files/scheme_in_48/tutorial/overview.html]]
-[[href:http://i.loveruby.net/ja/projects/href/]]
-[[GHC/Data Parallel Haskell:http://www.haskell.org/haskellwiki/GHC/Data_Parallel_Haskell]]
**chapter08, p.18のExampleの正規表現 in Perl [#i171fb49]
print ">";
$str = <STDIN>;
####### 正規表現によるマッチングのみなら... #######
print "Before:\t".$str."\n";
if($str =~ /\[\d(,\d)*\]/){ ####### 正規表現部分
print "Match:\t".$str."\n";
}else{
print "Not Match:\t[]\n";
}
####### 直接的に変換すると... #######
@str_list = split(//, $str);
$ret="";
$i=0;
if(@str_list[$i] =~ /\[/){
$i++;
if(@str_list[$i] =~ /\d/){
$ret=$ret.@str_list[$i];
$i++;
while(@str_list[$i] =~ /,/ && @str_list[$i+1]=~ /\d/){
$ret=$ret.@str_list[$i+1];
$i+=2;
}
if(@str_list[$i]=~ /\]/){
print "After:\t[(\"".$ret."\"),\"\"]\n";
}else{
print "After:\t[]\n";
}
}else{
print "After:\t[]\n";
}
}else{
print "After:\t[]\n";
}
**[[Monadius解析>勉強会/輪講/Haskell2009/Monadius解析]] [#b6e8ef1a]
-Monadiusのソースコードをやさしく読み解いてみる。
**新規定義・ユーザ定義子の吐かせかた [#sca865f8]
-表示定義用クラス Show
--Showクラスと関数showはC言語のprintf文みたいなものですが、showは出力させたい値の型によって(コマンドライン上の?)出力方法を判断しています.
---Haskellにはそのままでは出力できない型もあるため.
--なので、data子の宣言などで新規に定義した値・関数は新たに「自分はこう出力されたいんだ」という規則をShowに教えてあげなくてはなりません.
-Showへの定義例
--第11章の本文中の関数"exprs"の出力のさせ方.
--オペレータ(演算子)の定義
data Op = Add | Sub | Mul | Div
--式の定義
data Expr = Val Int | App Op Expr Expr
--表示用定義
instance Show Expr where
show (Val a) = show a
show (App o l r) = show l ++ show o ++ show r
instance Show Op where
show Add = "+"
show Sub = "-"
show Mul = "*"
show Div = "/"
--出力例
---入力:(App Mul (App Sub (Val 25) (Val 10)) (App Add (Val 50) (Val 1)) )
---出力:25-10*50+1
--※この出力おかしいんじゃね? priorityどうなってんだよ?
---今回のプログラムも計算は木構造で行うのですが、各ノード内は独立としてそこにpriorityが掛かっているのです.
---つまり出力時に木の「枝」に当たる部分を判断して前後に括弧を吐かせる、なんてことが出来れば出力は正常に
(25-10)*(50+1)
となってくれるはずです.
---いい方法があればコメント欄へ
#comment
ページ名: