演算子=関数?
のびのびなHaskell日記さんのところのid:muscovyduckさんのコメントより
カッコを外すと問題が生じるのは、'-'(マイナス)も実は関数(二項演算子)だからです
二項演算子は関数では無く、()で囲んだときに関数になると思っていたのですが、ほんとのところどうなんでしょうか?
$
最近は、いそがしくてSICPの問題が解けていないんですが、ふつうのHaskellプログラミングを読んでいます。
ふつけるを読んでいて、入門Haskellにもでてきていたのですが、$というものの便利さに気づきました。
入門Haskellでは、$は何もしない関数として紹介されていたので、意味がわからなかったので、サンプルもスルーしていたみたいでした。
$は、右結合をもつ関数です。右結合をもち、何もしない関数。
どんな場面で便利かというと、例えば、こんなコード。
dol x = take 5 ( reverse ( replicate 100 x))
のような括弧が多いコードを
dol x = take 5 $ reverse $ replicate 100 x
のように、括弧を減らして読みやすくすることができます。
$は先ほど述べたように右結合の関数なので、右から関数が適用されていきます。
自分は、括弧がある程度多いと、なんとなくLispっぽく感じてしまうので、この$が大好きです。
こんにちは
こんにちは。hasko改め、haskonです。
また、よろしくおねがいします。
デジタル表示
SICPは、もともと大学の教科書のため、数学的な問題が前半多いです。
なので、たまには違うジャンルのプログラムでも書いてみます。
今回は、Best of Ruby Quizという本に出てくる問題。
Quiz2。数字の文字を引数で受け取り、電卓の様な表示を行うというプログラム。
方針としては、数字をAAで表現するリストをつくり、
順に表示させてみます。
import Data.Char list0 = [" -- " ," " ," -- " ," -- " ," " ,\ " -- " ," -- " ," -- " ," -- " ," -- "] list1 = ["| |" ," |" ," |" ," |" ,"| |" ,\ "| " ,"| " ," |" ,"| |" ,"| |"] list2 = ["| |" ," |" ," |" ," |" ,"| |" ,\ "| " ,"| " ," |" ,"| |" ,"| |"] list3 = [" " ," " ," -- " ," -- " ," -- " ,\ " -- " ," -- " ," " ," -- " ," -- "] list4 = ["| |" ," |" ,"| " ," |" ," |" ,\ " |" ,"| |" ," |" ,"| |" ," |"] list5 = ["| |" ," |" ,"| " ," |" ," |" ,\ " |" ,"| |" ," |" ,"| |" ," |"] list6 = [" -- " ," " ," -- " ," -- " ," " ,\ " -- " ," -- " ," " ," -- " ," -- "] lists = [list0,list1,list2,list3,list4,list5,list6] printLine lnum snum = putStr (last (take snum (last(\ take lnum lists)))) >> putStr " " char2printLine lnum str = printLine lnum ((digitToInt str)+1) mapPrint str lnum = mapM_ (char2printLine lnum) str\ >>putStrLn "" printDigit numStr = mapM_ ( mapPrint numStr) [1..7]
表示サイズの都合で、バックスラッシュを入れて改行しているところは、本当は1行で書いています。
文字と文字の間にスペース入れるとか、改行入れるとかに、なんとなく恥ずかしい処理が。(w
実行結果はこうなります。
*Main> printDigit "12345" -- -- -- | | | | | | | | | | | | -- -- -- -- | | | | | | | | | | -- -- -- *Main> printDigit "67890" -- -- -- -- -- | | | | | | | | | | | | | | | | -- -- -- | | | | | | | | | | | | | | | | -- -- -- --
Best of Ruby Quiz (Pragmatic Programmers)
- 作者: James Edward Gray
- 出版社/メーカー: Pragmatic Bookshelf
- 発売日: 2006/03/01
- メディア: ペーパーバック
- クリック: 4回
- この商品を含むブログ (7件) を見る