ループ書いたら負けかなと思っている uskz 自己紹介 梶本裕介 25歳 ループ嫌い 抽象度が低すぎる 形式的な扱いが面倒くさい 範囲とかいちいち気にしないといけないのが嫌 accumulate? transform? int f(int a, int b, int c) { return 3 * a + 3 * b + 3 * c; } int f(int a, int b, int c) { return 3 * (a + b + c); } bool p(bool a, bool b, bool c) { return (!a && b || a && !b) != c; } bool p(bool a, bool b, bool c) { return a == b == c; } ホーア論理 {P}S {Q} Pは事前条件で,Qは事後条件.{P}S{Q}が正しいことはPが成り立つ
The class meets Monday and Wednesday at 3pm in GHC 4101. Reading list September 9 (Karl Crary) C. A. R. Hoare. An Axiomatic Basis for Computer Programming. 1969. (pdf) Edsger W. Dijkstra. Guarded Commands, Nondeterminacy and Formal Derivation of Programs. 1975. (pdf) (Optional) C. A. R. Hoare. Proof of a Program: FIND. 1971. (pdf) September 14 (Rob Simmons) Alonzo Church and J. B. Rosser. Some Pro
-XEmptyDataDeclsフラグ(または同等のLANGUAGEプラグマ)が指定されていると、構築子なしでデータ型を宣言できるようになる。例えば、以下のようにである。 data S -- S :: * data T a -- T :: * -> * 構文的にいうと、この宣言は「= constrs」の部分を欠いている。このように定義される型は多相的でも良く、さらにどのような種について多相的でも良いが、種が*でないなら、明示的な種注釈を使う必要がある。(7.13.5. 明示的に種付けされた量化を見よ) このようなデータ型はボトムというただ一つの値しか持たないが、「幽霊型(phantom type)」を定義するときには便利なことがある。 Haskellは、データ型に文脈を与えることを許している。例えば以下のように。 data Eq a => Set a = NilSet | ConsSet
HaskellのGHC言語拡張に含まれる存在型は、existential quantifierを使わずにuniversal quantifierと代数的データ型を組み合わせて表現されます。以前からどうしてこんなことができるのかと思っていたのでそのカラクリを調べてみました。 GHC言語拡張では存在型を次のように定義できます。 {-# LANGUAGE ExistentialQuantifications #-} data Q = forall x. P x このように型引数を取らないデータ型のデータ構成子に、全称量化された変数を持つような型を定義します。この定義は直接existential quantifierを使えば次のように表現できるものです。 -- 疑似Haskell。GHCではコンパイルできない。EHCならできるかも。 data Q = P (exists x. x) データ構成子の
昨日モニャドセミナー3を開催しました。僕(檜山)がどうも熱暴走していた(熱で暴走したんじゃなくて、暴走して熱を出したのかも)きらいがありました。とりあえず、説明があやふやだったところを補足します。 次の話をしました; 「破壊的代入と単一代入を自明モノイドで定式化できる。ただし、単一代入のモデル化は実際にやってみると微妙にうまくいかない」と。で、「どこがうまくいかないのか?」とのご質問。「昔やってみたとき、うまくいかなかった記憶がある」と要領を得ない返答をしたのですが、何がうまくいかなかったかサッパリ思い出せません。 という事情なので、最初から全部計算し直してみることにしました。僕は1桁の足し算とかしょっちゅう間違うので、そのテのミスで「うまくいかない」と思い込んでいた可能性もあります。以下に、確認の過程を全部書き下すので、ご興味がある方は(いるのか?)チェックしてみてください。なにか間違い
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く