猫も杓子もマストドン
ふつうのHaskellのコードについて
サンプルコードが正しくない.
ふつうのHaskell内容がjavaを例示しながら書かれているシンプルで分かりやすい本である.
私にはすごいHaskellより分かりやすい.しかし,古いためサンプルコードが動かない.
先達
2016-01-11 『ふつうのHaskellプログラミング』 もくもく読書会(第12章) の振り返り - SE情報技術研究会’s blog
ファイルの文字列検索 ~emacs,shellコマンド~
目的
複数のファイル間で,あるいはあるディレクトリ配下全てで,文字列検索をしたい.
動機
サンプルプログラムを,ダウンロードしてきて,このコードを使ってるコードを網羅的に探したい.
emacs
M-x grep-find
C-o,o,C-p,pなど色々面白い.ただ,見るためにバッファが全て開かれる.これは良くない所.ほかにいいのないかな.
C-x C-b (あるいはC-x b)して, markをつけて, C-z (あるいはtab,Function)でpatternで選択, kill bufferを選んで一気に消さなければならない.
shellコマンド
どこからかコピペしてきたやつ.申し訳ありません.
########################## # grep # -r : 再帰的にgrepコマンドを実行する # -n : 行番号を出力する # -w : 文字列全体にマッチする場合 # -l : (option)これをつければファイル名だけを出力(マッチした部分は省く) # # Usage # # 現在いるディレクトリ配下から「httpd」という文字列を含むファイルすべてを抽出する # $ grep -rnw . -e "httpd" ########################## grep -rnw 'directory' -e "pattern"
Haskell ~入出力~
入出力
コード
main = do out <- getLine -- input: out putStrLn (out ++ "は大事")
% stack build;stack exec project1-exe project1-0.1.0.0: unregistering (local file changes: src/Lib.hs) project1-0.1.0.0: build (lib + exe) Preprocessing library project1-0.1.0.0... [1 of 1] Compiling Lib ( src/Lib.hs, .stack-work/dist/x86_64-osx/Cabal-1.24.2.0/build/Lib.o ) Preprocessing executable 'project1-exe' for project1-0.1.0.0... [1 of 1] Compiling Main ( app/Main.hs, .stack-work/dist/x86_64-osx/Cabal-1.24.2.0/build/project1-exe/project1-exe-tmp/Main.o ) [Lib changed] Linking .stack-work/dist/x86_64-osx/Cabal-1.24.2.0/build/project1-exe/project1-exe ... project1-0.1.0.0: copy/register Installing library in /.stack-work/install/x86_64-osx/lts-8.11/8.0.2/lib/x86_64-osx-ghc-8.0.2/project1-0.1.0.0-AckhfDVtQB568iPvGBSrt7 Installing executable(s) in /.stack-work/install/x86_64-osx/lts-8.11/8.0.2/bin Registering project1-0.1.0.0... % stack exec project1-exe hellowordl hellowordlは大事
do式
コードのレイアウト
do式の複数の式を束ねる構文である.Javaのブロック構文に相当する.
do式のように複数の式を束ねる構文では,複数の式のインデントを揃えることが属するブロックを表す.
この規則を,レイアウト
,またはオフサイドルール
という.
do式と遅延評価
Haskellの特徴は遅延評価である.よって,命令型のプログラム言語のように上から順に実行されるわけではない.do式を使うと,上から処理されていく.
参考
ふつうのHaskell
ここの記事が小さく良くまとまって書いてある. Haskellで競技プログラミング IO編 - Qiita
Haskellの学習する動機
なぜhaskellを学ぶか
注意この記事は,全く固まっていない私の考えを形にするためのものです.
これにはいろいろな記事が言語問わずある.
今日2017/04/19時点で学ぶ動機は,現状,まだ使われている純粋関数型の生き残りであるからである.
純粋関数型と呼ばれる言語は数あれど,現在いまだ使われているものは少ない,そのなかでも,変数や引数の評価の際に,融通がきかないのはHaskellくらいである.他の言語は人間に歩み寄り,本来の純粋関数型の形では通らない表現が可能である.
よって,純粋関数型を勉強したいと思った時Haskellが適切である.これは,別にHaskellが生産性が高く,直感的で,コミュニティが活発で,パッケージが充実していて,などそういった尺度で選ばれたわけではない.
結論
純粋関数型の勉強のため
追記2017/04/19
あまりにもあまりになので「ふつうのHaskellプログラミング」を読んでみた.
「ふつうのHaskellプログラミング」作者が言うには,,,
- 柔軟なプログラミング
- コンパイル時の型のチェックが強力
- 多相型という機能があり,様々な型を使いたいときに統一的に扱うことができる.これはJavaの総称型とほぼ等しい.
- 可読性が高い
- 再代入ができないことは,現代の大人数のソフトウェア開発においても,代入の乱用による可読性の低下を0にできる.
- 遅延評価
markdown記法について
空白はめちゃくちゃ大事.
特に,記号をリストとかにしたい時,記号の後に空白入れないといけない
"「* 」でリスト表現,ただし,タブか空白文字4つで階層を表さないといけない"
* hoge * fuga * piyo
- hoge
- fuga
- piyo
- fuga