2007-01-01から1年間の記事一覧

数学ガール

数学ガール (数学ガールシリーズ 1)作者: 結城浩出版社/メーカー: SBクリエイティブ発売日: 2007/06/27メディア: 単行本購入: 58人 クリック: 1,055回この商品を含むブログ (967件) を見る読んでいる途中です。電車の中で読んでいるので数式は目で追っている…

代数的データ型

本では、構造体スタイル、列挙型スタイル、共用体スタイルと名付けて3つに分けて説明されています。そのうちの構造体スタイルについて説明を読みました。型を定義する時に使うのはdata宣言。こんな例が出てきました。 data Anchor = A String String Anchor…

Haskellではコンパイル時に型がチェックされます。そういう言語は多いですよね。特徴的なのは型推論。おかげでほとんどの場合型を宣言しなくても大丈夫です。とは言っても完璧ではないので明示的に宣言できるようになっています。そのときに使うのが「::」。…

演習問題

8章の演習問題を解きました。ポイントフリースタイルで書く問題。まずはlstrip lstrip :: String -> String lstrip = dropWhile (== ' ') そしてrstrip rstrip :: String -> String rstrip = reverse . lstrip . reverse 最後にstrip strip :: String -> Str…

Perlのバージョンアップでいろいろエラー

さくらインターネットのPerlのバージョンが5.8.4から5.8.8に変わりました。事前にメールで予告があった時には特に影響ないかなと思っていたのですが、実際はそんなことはなくてほとんどのスクリプトがエラーになってしまいました。原因はモジュールのインス…

ポイントフリースタイル

関数合成や部分適用を使うと、値を返していた関数が、関数を返す関数になります。関数を返す関数というのを言い換えると、関数を定義する関数と言うことになります。関数を関数で定義するコーディングスタイルをポイントフリースタイルと呼ぶそうです。本に…

部分適用

n個の引数を取る関数に対してn個未満の引数で関数を呼び出すと、関数に渡した引数を適用した関数が戻ってきます。厳密には引数を一つ取ってその引数を適用した関数が戻ってきてというのをくり返しているとのことです。なので、引数の数が少ない場合は関数が…

関数合成

複数の関数を合成して一つの関数を作れます。 main = do cs <- getContents print $ numberOfLines cs numberOfLines :: String -> Int numberOfLines = length . lines これまでだとこう書いていました。 numberOfLines cs = length $ lines cs 引数を書か…

問題追加

その14(2x2)を追加しました。

バージョンアップしました

バージョン1.14.1です。 WindowsのDPI設定が120DPIの場合にHTML出力の設定ダイアログのレイアウトが崩れるバグを修正しました。

無名関数

8章の関数の章に入りました。新登場は無名関数。\を使って書きます。無名関数は高階関数と組み合わせて利用可能。いちいち関数定義をしなくても高階関数が使えます。無名関数でもパターンマッチが使えますが、パターンは一つだけ。

120dpiでのレイアウト崩れは解決せず

最新のパッチをあてた状態でコンパイルして実行してみましたが駄目でした。ライブラリのソースを直すという手もあるのかも知れませんが、そこまでのやる気がなくてもっと安易な方法にしました。具体的にはPanelをたくさん使ってのレイアウト。たくさんと言っ…

120dpiでのレイアウト崩れ

掲示板で報告がありました。Windowsの画面のプロパティの設定でdpiを120に設定するとHTML出力の設定ダイアログのレイアウトが崩れて利用に支障があるとのこと。試しに自分のPCでも設定を変更したところ確かにおかしくなりました。動きを見た感じではAnchors…

読めるけど書けない

第7章の練習問題が解けませんでした。回答例を読むと何をやっているのかは分かるので、読めるけど書けないという状態。まだまだ理解が足りませんね。

let式とwhere節

大雑把な理解ですが、let式はローカル変数を使う時に、where節はローカル関数を使う時に登場するもののようです。let式はinとセットですね。let式は式なので値を返し、where節は値は返さないというのが違い。と、書いてみましたが、実はまだあまりよく分かっ…

関数定義

関数名や変数名の先頭はアルファベット小文字か「_」。大文字は使えないのですね。試しに先頭大文字の関数を定義しようとしたら "Invalid type signature" とエラーになりました。二項演算子の定義については使う機会があまりなさそうなので、二項演算子の定…

case式

関数の引数以外でパターンマッチやガードを使いたい時に使えます。なので、他の言語のcase文との関連で覚えるのではなく、パターンマッチとガードを使うための式と覚えた方が良さそうです。

パターンマッチ

ghcコマンドの場合-Wオプションでパターンマッチで実行時エラーが起きる場合に警告してくれるそうです。変数パターン、「_」パターン、リテラルパターン、タプルパターン、リストパターン、データコンストラクタパターン、「@」パターンについての説明を読み…

if式

1行で書くのが一般的とのこと。以下の書き方もよく使われるそうです。 if c == '\t' then '@' else c if c == '\t' then '@' else c 式の継続を使った書き方ですね。

レイアウト

do式を使って複数の式を書く時にはインデントを揃えていました。インデントを使う以外にも{ }と;を使って書くこともできます。オフサイドラインはdo等のあとに現れる単語の位置によって決まるので、以下のどちらの書き方も可能です。 main = do cs <- getCon…

ブラウズノードが分からない

次のバージョンの公開に向けて機能追加中です。「時計」や「ベビー&マタニティ」の検索で、バーゲンコーナーの商品一覧を出すためにブラウズノードが知りたかったのですが分かりませんでした。どうやって調べれば良いのでしょう。時計ストアと言いながら、…

コメント

これが出てくるのを待っていました。一行コメントは--。ブロックコメントは{- -}。ブロックコメントはネストできます。珍しいですね。リテレイト形式というのがあるそうです。これはコメントがメインで、コードがおまけのような書き方。

問題追加

理科を追加しました。

練習問題

ソースコードがどのように解析されるかを括弧で答える問題。問題はこの3問。 resolve f (x:xs) = textify x ++ resolve f xs getenv key env = fromMaybe "" $ lookup key env readTemplate id = readFile $ prefix repo ++ "/" ++ id 私の答えはこれ。 reso…

実習 cat -n

関数適用が最も優先順位が高くて、どの演算子よりも優先的に結合します。わかりにくいところらしいです。タプルのパターンマッチが出てきました。と言ってもちょっと出てきただけでちゃんとした説明はもう少し後ろで出てくるみたいです。

問題追加

その12(2x2)を追加しました。

問題登録

早押しクイズに問題登録機能を追加しました。問題募集中です。

リスト

Haskellのリストは一方向リンクリストで、リストをたどる順番は前から後ろ。無限リストが簡単に作れます。 main = do print $ take 10 [1..] print $ take 10 [1, 3..] [1,2,3,4,5,6,7,8,9,10] [1,3,5,7,9,11,13,15,17,19]null関数はisNullという名前の方が…

タプル

リストと違って異なる型の値を一緒に扱えます。fstとsndで2要素のタプルから値を取り出す方法はわかったのですが、3要素以上のタプルから値を取る方法は不明のままです。

文字と文字列

文字コードはUnicodeとのこと。文字リテラルはシングルクォート、文字列リテラルはダブルクォートを使用。文字と数値間の変換は、Char.ordとChar.chrを使用。試しに以下のスクリプトをsjisで書いたところコンパイルエラーになりました。utf-8では無事コンパ…