2001-06-30 今日は良いことあると良いな
λ. 問題
矛盾と、単に偽である事の違いは?
λ. コンソール
僕も、「ユーザー空間で動作するコンソールをデフォルトにするのが良い」と思う。でも、jfbtermは、(以下略)
λ. 論理プログラミングのミニプロ (2)
DCGでチャキチャキとXMLパーサを書き上げた。インターフェースとかが無茶苦茶だけど、それなりには動いているっぽい。
選言が使えたことを思い出して、若干シンプルに出来た。
λ. No such event
DocType宣言周りをテストしてたら変な現象に遭遇。EmacsのInferior Prolog modeで、以下のような事が起こる。コンソールで使う分には発生しないし、何がこのメッセージを出力してるのかも良く解んなかったし、なんか謎。
?- write("!D"). ! No such event
λ. 体育Iのレポート
明日こそは書かねば… > 自分
2002-06-30
λ. お昼
回転寿司。
λ. Monad
Monads for functional programming を読み返して、HaskellのMonadクラスが圏論での定義と等価な事がやっと理解できた。
λ. 韓国版『Java言語で学ぶデザインパターン入門』
発音は「Javaオノロ ペウヌン ティヂャイン ペトン インムン」って感じかな?
2003-06-30
λ. お昼
富山名物、ます寿司。
λ. 水泳
水中カメラで自分の泳ぎを観察する予定だったので楽しみにしていたのだけど、水中カメラの調子が悪かったとかで、かわりにクロールのコツについて教わった。
- サムエントリー
- ハイエルボー
- S字プル
- 手をいれるタイミングとキックのタイミングを合わせる (そのためにツーキックの練習をしたのだけどムズかった)
- (もう一つ教わったはずだけど、思い出せない。ローリングに関することだったかも。)
λ. Teach Yourself Scheme in Fixnum Days
LISP Scheme Part7 (772)より。Fixnum days ってあんた…… (笑)
2004-06-30
λ. 「出口調査は民主党に清き一票を」キャンペーン
出口調査は「民主党」!
出口調査では「民主党」に清き一票を!!
\\ //
∧_∧ ∧_∧
∩´∀` )( ・∀・) アナタの一票が
ヽ .)( つ¶ 9 開票速報を変えます!
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
|. ジャス研 新 党 .|
|________| /
.||. ∧_∧ ∧∧ || 出口調査は「民主党」!
.|| ( ´∀` ) ( ゚Д゚) || 出口調査は「民主党」!
||-────────|| どこに投票しても出口調査は「民主党」!
|| _______ .|| 出口調査で「民主党」に清き一票を!!
.||__ __|| \
.|〇〇|≡≡@≡≡.|〇〇|
.{二二二._[ ]_.二二二}
凵 凵
◇◇◇◇◇◇自民でも民主でもなく「マスコミにNO!」◇◇◇◇◇◇
◇◇◇「出口調査は民主党に清き一票を」キャンペーン開催中!◇◇◇
http://www.wafu.ne.jp/~gori/diary3/000306.html
=======↑↑↑ コピペ推奨 ↑↑↑============
面白そうだなぁと思ったのだけど、うちのところの投票所では出口調査なんてやってるの見たことないので、縁がなさそうだなぁ。
2005-06-30
λ. The 2005 GHC survey
出てますよ。
λ. 『道路の経済学』 松下 文洋
λ. CのプログラムからHaskellの関数を呼び出す
soutaroさんの「CのプログラムからOCamlの関数を呼び出す」というエントリに触発されて、Haskellの場合について書いて見た。OCamlの場合に比べると幾分面倒くさい。
- Foo.hs
-
module Foo where import Foreign.C f :: CInt -> CInt f x = x + 1 foreign export ccall "f" f :: CInt -> CInt
- main.c
-
#include <stdio.h> #include "HsFFI.h" #ifdef __GLASGOW_HASKELL__ #include "Foo_stub.h" extern void __stginit_Foo ( void ); #endif int main(int argc, char *argv[]) { hs_init(&argc, &argv); #ifdef __GLASGOW_HASKELL__ hs_add_root(__stginit_Foo); #endif printf("f(%d) = %d\n", 3, f(3)); hs_exit(); return 0; }
- コンパイル
-
% ghc --make -fglasgow-exts Foo.hs % ghc -c main.c % ghc --make -fglasgow-exts -no-hs-main Foo.hs main.o
一行目は Foo_stub.* を作るため。
ここでは書かなかったが、実行時にHaskellの関数をCの関数に変換することも一応出来る。
2006-06-30
λ. となりの801ちゃん
なんか、「となりの801ちゃん」というブログを紹介されたのだが、これ凄いね。
λ. concatN
<URL:http://d.hatena.ne.jp/lethevert/20060630/p3> より。
ぁゃιぃ拡張機能を使うと出来ないこともない気がする。以下のコードの元ネタはOlegさんの Deepest functor 。なお、私はどうしてこれでうまくいくのかいまだに良くわかってない。
{-# OPTIONS -fglasgow-exts #-} {-# OPTIONS -fallow-undecidable-instances #-} {-# OPTIONS -fallow-overlapping-instances #-} module ConcatN where data Atom -- Check if a type is a collection type. This is the only typeclass that -- needs overlapping instances class IsCollection t coll | t -> coll instance IsCollection (m a) (m ()) instance TypeCast Atom coll => IsCollection t coll -- our common working horse class TypeCast a b | a -> b, b->a where typeCast :: a -> b class TypeCast' t a b | t a -> b, t b -> a where typeCast' :: t->a->b class TypeCast'' t a b | t a -> b, t b -> a where typeCast'' :: t->a->b instance TypeCast' () a b => TypeCast a b where typeCast x = typeCast' () x instance TypeCast'' t a b => TypeCast' t a b where typeCast' = typeCast'' instance TypeCast'' () a a where typeCast'' _ x = x class ConcatN a c | c -> a where concatN :: c -> [a] instance (IsCollection c coll, ConcatN' coll a c) => ConcatN a c where concatN = concatN' (undefined::coll) class ConcatN' coll a c | coll c -> a where concatN' :: coll -> c -> [a] instance ConcatN' Atom a a where concatN' _ a = [a] instance (ConcatN a c) => ConcatN' [()] a [c] where concatN' _ = concatMap concatN test1 = concatN [[[True]],[[False,True]],[]] test2 = concatN [[1::Int,2,3],[4]]
深さを指定してconcat
稲葉さんのとこで色々なコードが紹介されていたので、私も少しバリエーションを。深さを指定してconcatするなら、私ならこんな感じで書くかな。
data Z = Z data S n = S n class ConcatN a n l | a n -> l where concatN :: n -> l -> [a] instance ConcatN a Z [a] where concatN _ = id instance ConcatN a n l => ConcatN a (S n) [l] where concatN _ = concatMap (concatN (undefined :: n))
さらに、型クラスではなくGADTを使ったバージョン。
data N a l where Z :: N a [a] S :: N a l -> N a [l] concatN :: N a l -> l -> [a] concatN Z = id concatN (S n) = concatMap (concatN n)
2008-06-30
λ. “A functional quantum programming language” by Thorsten Altenkirch and Jonathan Grattage
We introduce the language QML, a functional language for quantum computations on finite types. Its design is guided by its categorical semantics: QML programs are interpreted by morphisms in the category FQC of finite quantum computations, which provides a constructive semantics of irreversible quantum computations realisable as quantum gates. QML integrates reversible and irreversible quantum computations in one language, using first order strict linear logic to make weakenings explicit. Strict programs are free from decoherence and hence preserve superpositions and entanglement - which is essential for quantum parallelism.
量子コンピュータのための関数型言語QMLについて。QMLはゲートやそれに対応するコンビネータを直接記述するのではなく、普通の関数型言語のような書き方の出来る言語。 非可逆な量子計算を表す圏FQCと可逆な量子計算を表すその部分圏とを、非可逆な古典計算を表す圏FCCと可逆な計算を表すその部分圏とに対応させながら、言語を構成していっているのが面白い。 ただ、細部については、私は量子力学はもとより線形代数をちゃんと勉強していないので、良く分からず悔しい。
2009-06-30
λ. ICFP Programming Contest 2009
今年も Team Sampou というチーム名で ICFP Programming Contest に参加してた。 今年のメンバーは、私、nobsun、[1..100]>>=penさん、cut-seaさんという感じ。 オンラインでのやり取りにはChatonのhaskell-jpルームを使っていた。
- haskell-ja > Archives > 2009/06/26
- haskell-ja > Archives > 2009/06/27
- haskell-ja > Archives > 2009/06/28
- haskell-ja > Archives > 2009/06/29
今年は、しょうもないバグで時間を使いすぎて出遅れて、2002が誤差のせいでホーマン遷移一回ではクリア出来ないのをどうしようかと考えているうちに時間切れになってしまった、という感じ。 途中では300xの Eccentric Meet and Greet まではギリギリなんとかなるんじゃないかと思ってたけど、見込みが甘かったなぁ。 結局、2002はギリギリで解けたけど、最終的なスコアは Weighted Total Score 1002.1329 (8 problems solved) 。 とても楽しかった72時間だけど、今年も結果を出せなかったのは少し残念。
振り返り
Keep
- 可視化ツールを作ったこと
- 昨年のshinhさんとかを見て可視化重要と思ってたので、作ってみて、確かにそうだと思った。
Problem
- 分業が出来なかった。
- 分業すべきところで、分業出来てなかった。私が土曜日の午前中別の用事があって集まれなかったのが一因。まあ、みんな土台から自分で書きたがるしね。
- しょうもないバグに悩みすぎ。
- Input命令がSqrt命令にデコードされているとか、0xCAFEBABEが0xCAFABABEになってるとか、しょうもないバグで半日以上つぶれた。
- 過剰な抽象化レイヤ
- 昨年、あまりにアドホックなコードを書いてしまい収集がつかなくなってしまったことの反省から、今年はArrowベースのFRP(Functional Reactive Programming)とその上のタスク記述用のMonadを作ったんだけど、これは今回の問題には抽象化レイヤが過剰だった。結果として、それを作るために時間を使いすぎたし、また他の人がいじりにくくしてしまったと思う。
- デバッグ用の口
- 上で書いた抽象化レイヤにはログ出力用の口を用意していなかったので、実行の様子の観察がtrace関数頼りになってしまっていた。ちゃんとログ出力用の口を用意しておくべき。
- 寝不足
- 興奮してあまり寝れていなかった。あまり眠気は感じなかったけど、やっぱり疲れてはいて効率は低下している。コードを書いていると気づきにくいけど、数学的な事を考えると、寝不足なのが直ぐにわかる。
Try
- コードカバレッジツール
- 命令デコードミスについては、コードカバレッジツールを使えば、VMのコードの特定の部分が実行されないことから気づけたはず。GHC にも Haskell Program Coverage (HPC) が付属しているし、カバレッジツールは使えるようにはなっておこう。
- ちゃんと寝る
- ちゃんと寝よう。どうやったらいいのかわかんないけど。
ψ ケシ [べーやんって誰?(´Д`;]
ψ さかい [ベルゼ◯ブっす。バスタードの20巻のあとがきのネタ。]