λx. x K S K @はてな

このブログ内に記載された文章およびコードの著作権は,すべて Keisuke Nakano に帰属します.

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

スーパー pre 記法

スーパーpre記法というのが OCaml にも対応しているらしい. サポートされている言語が妙に多いけど,Vim のシンタックスファイルから導出してるのかな. このリストとほぼ一致してるし. それはさておき,せっかくなのでその記法を使って小ネタを一つ. uni…

LablGL でオロイド

ここを見て思い出したのだが, 昔 lablGL でオロイドを描いて転がして遊んだことがあった. オロイドとは,「2つの直角円錐を底面で貼り合わせ,軸を通る断面(正方形になっている)を 90 度ずらしてできる立体」で 一度転がすだけで全ての面を接地させられ…

PLAN-X 2007

受理されたようです.発表するのは共著者の予定. 前の日記でも少し触れたが,最近Coqにハマっている. とりあえずtree transducer関連のものを片っ端から定式化しているけども, まだgoal-directedの証明に慣れてない所為かcut規則を使いまくっている. 知…

Haskell Bowling

こちらから引用. うーん,この定義って 第9フレームがストライクで 第10フレームが2投(1本以上9本以下)で終わった場合, 正しい得点を返さないような気が. OCamlで書けばこんな間違いしないのに(嘘). [追記] こちらに続きがあります.

APLAS 2006

参加された皆さんお疲れ様でした. さすがに,2泊5日などという頭の悪いスケジュールを組んだのは私だけだったようで. 今回最も印象に残ったのは Tree transducerの業界で著名なSM氏と議論ができたこと 帰りの京成線でのRA氏によるCoqのチュートリアル どっ…

出張

明日からシドニーへ出張.2泊5日. 自らの選択とはいえ,なかなかのハードスケジュールだ. しかも発表は最終日の午後だという. それでも,初めての南半球なので満喫してこよう.

仙台の報告

O堀先生の軽量関数融合の良さがだいぶ理解できた. この話は, 既存の方法で可能な関数融合(の多く*1)を統一的に扱うことができ, 尚且つ有限回の単純なステップの自動変換で実装できるということを示した点が素晴らしいのだと思う. その意味では,「他の…

記号ゴルフ

唐突だが現実逃避のために Ruby の記事を書いてみる. 巷(?)で記号ゴルフというのが流行っているらしい. とりあえず記号のみの Ruby のプログラムで止まらないものを書くことにチャレンジ.`#{''<

がんばればできる

こちらから勝手に引用. Noneというコンストラクタを持つデータ型を定義してしまうと、option型をどうがんばっても使えなくなる。 その上書き定義の前に何か書き加えてもいいんであれば簡単に回避できるけど, 定義した後となるとできなさそうな気もする. …

コードゴルファー猿

http://codegolf.com/ コードの小ささを競うプログラミングコンテストらしい. ランキングを見てみると日本人らしきエントリーがちらほら. 日本に優秀なプログラマが多いのは喜ばしいことだ. それとも,こういう問題が日本人向きなだけなのだろうか?

桜桃を摘む人

ボストン・メスの上の手をクローにすると,チェリー・ピッカーという技になるらしい. 簡単そうなので今度試してみよう.

λx. x K S K

この日記のタイトルになっているラムダ式「λx. x K S K」は, 「*1の一点基底」と呼ばれるコンビネータで, 全ての閉ラムダ式はこのコンビネータ X = λx. x K S K から構築することができる. このことは,S と K がそれぞれ X (X X) と X X X で表現できる…

日本語版 Google 電卓

なんだかやり過ぎのような. google:自然対数の底の円周率乗の虚数単位乗 google:自然対数の底の円周率虚数単位乗 二つ目は日本語としておかしいし. でも,下はだめらしい. google:ネイピア数の円周率乗の虚数単位乗

ja.reddit.com

というソーシャルブックマーク(?)があるというのを恥ずかしながら最近聞いたので, 見にいってみると自分の記事が紹介されていてびっくり. 紹介してる yoriyuki さんというのはあの yoriyuki さんかな. 8 point も頂いているということは, 少なくとも …

#009 賢人鳥をまねる

OCaml では,let rec を使わずに再帰関数を模倣することができる. 但し「for ループを使えばできる」とかそういう話ではない. 例えば,階乗を計算する関数 fact は,通常 let rec を用いて,let rec fact n = if n > 0 then n * fact (n-1) else 1 と再帰…

ANA の穴

11月にシドニーへ出張の予定だが, ANA はオセアニア方面には運行していないらしい. ちょっと意外. スターアライアンス系列で成田からシドニーに行けるのは, オークランド経由のニュージーランド航空のみ. 直通で行けるのは JAL かカンタスだけだが, ど…

#008 遅延評価の実装

OCaml で遅延(怠惰*1)評価を 実装する方法があるが, 毎回 lazy や Lazy.force を書かないといけないため非常に面倒である. たとえば,ML の授業などでは,type 'a lazy_list = Nil | Cons of 'a * 'a lazy_list lazy_t とすれば簡単,と教わるのではない…

関数型言語ブーム

近所の図書館に行ったら「ふつうのHaskellプログラミング」が置いてあった. 小さな図書館だったので,情報リテラシーとかの書籍にまぎれていたのだが, まあ,そんな小さな図書館に置かれるほど関数型言語が流行っていると言えるかもしれない. OCaml でも…

違和感の理由

今年の JSSST の大会の招待公演者が,それぞれ修士課程と博士課程の指導教官だったりする事実. ああ,それに恥じない研究者にならねば….

#007 再帰の泣き所

今回のPPLサマースクール (ココも参照)は非常に参考になった. 関数型言語の実装についてはある程度分かった気でいたのだが, 自分の中で大きな勘違いをしていたようだ. それはコンパイルにおけるクロージャ変換のフェーズである. これまで,OCaml でプ…

#006 禁断の Obj

先日,フランスの XML 関係の研究者と共著する機会があり, 「こっちの方が早いだろ」「いやココを変えればこっちの方が」 「いやいやまだまだ改善できる」だの OCaml のコードで文通をしたりしていたが, そんな中,相手のこの一行に愕然としてしまった.ex…

APLAS 最終稿

提出したものに不備があったようで結果的に大幅に遅れてしまいました. 関係者の方々には非常に申し訳ないです.

#005 存在型(2)

先日 OCaml で存在型を実装する方法を紹介したが, 前回の例はあまり面白くないものだったので, こちらの記事にある存在型に対して同様の実装をしてみることにする. この記事にもあるように存在型は module として実装することも可能である (こちらの方が…

負の駆逐

(これは id:KeisukeNakano:20060817:1155714034 の解答です.問題はそちらをご覧ください) 挑戦した方に前もって言っておくと 「実際に操作を繰り返してその回数を数えるプログラム」というのは期待された解答ではない. もっと効率的にその回数を求めてほ…

APLAS

(だいぶ前にわかっていたことだが)めでたく採録されたらしい. S さん曰く「(採録された論文は)AsianというよりWesternな感じ」. しかし,シドニーで開催するという時点で Asian ではない気もする. とりあえず,最終稿に向けて鋭意修正中.

負の駆逐

研究室合宿でのプログラミングコンテストで出題した問題. 正解したチームは多かったものの, 解答時間が実質一時間しかなかったせいもあり, 残念ながら期待していた解答をしたチームは無かった. 暇な人は是非チャレンジを. 解答は後日ということで. 円…

#004 中置演算子化

Haskell の場合,任意の関数 f に対し, `f` のように `(バッククオート)で囲むことにより中置演算子(infix operator)として用いることができる. 一方,OCaml でユーザが定義できる中置演算子は一部の記号に限定されている. 以下では,OCaml で任意の…

#003 代数的データ型

int 型の要素から成るリストは,type int_list = Nil | Cons of int * int_list のように再帰的に定義され. 'a t = 'a (ここで type 'a t = Nil | Cons of int * 'a ) を満たすような t の最小不動点として捉えることができる. このような代数的データ型…

リファラを残さずリンクをたどる

リンクをアドレスバーにドラッグ&ドロップ.以上. こんなお手軽な方法があったとは….これって常識?

#002 存在型

あまり面白くない例だが,プリント可能なヘテロジニアス(異種混合)リストを考える. (但し,中身を直接見られないのでただの文字列のリストなのだが…)type hetero = Nil | Cons of ∃'a. 'a * ('a -> string) * hetero Cons の2つ目の引数は,要素を文字…