週に一回は書きますよ 月に4つ記事を書けばノルマは満たされます。
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

前にも書いたんですが、あんまりCurry化って好きじゃないです。

Call-By-Valueの言語では、引数を部分適用した関数とすべて適用した関数との間には大きな違いがあります。 部分適用の段階では関数はまだ予定表です。追加の引数が入ったらこの計算をしてこれを返す、というtodo listの状態です。 一方関数に十分な引数を与えると、計算が実際に行われてしまい、後に帰ってくるのは結果だけです。計算は行われてしまいます。

とくに副作用を伴う関数では、上の二つは副作用が起こる前と後とに相当するので、この違いは本質的です。そのため、二つは構文的に明確に区別して欲しいと思います。

スポンサーサイト
  • リソースを食いすぎない。メモリを食いすぎたりしない。
  • 処理系を複数並行で動かしても音を上げない。
  • Ctrl-Cとかですぐに帰ってくる。

Haskellをrunghcで使うと、この辺を満足していないと感じます。 ちなみにここではWindows XPとGHC 6.6との組み合わせを想定しています。

特にCtrl-Cへの反応が変です。 WindowsXPのコマンドプロンプトからrunghcをたたいて、そのプロセスを Ctrl-Cで止めると、一応プロンプトまで入力は帰っては来るのですが、 プロンプトからexitしようとすると反応がなくなります。

_

イス型チャイルドシートでは、酸素飽和度が低下する恐れがあります。
イス型じゃないなら、舟型?ねじれ舟型?


これは思いついた人が三人くらいいるかと思ったんですが、Googleによると今まで見つかっていないそうです。

てきとうにかきちらし経由

やってみました。自信のほどは?

+++ ゲーム検定 成績発表 +++

あなたの総合得点は54点  全国平均 54点

全国順位(11月24日 11時現在)
29158位(60153人中)

--ジャンル別得点表------------
            0_________50__________100%
ハードウェア       ■■■■■■■■■■■
ゲームシステム&テクニック■■■■■■■■■■■■■
キャラクター       ■■■■■■■■■■■■
ビジネス         ■■■■■■■■
雑学           ■■■■■■■■
--------------------------

--講評---------------------
あなたは「ゲーム大臣」
これだけの知識があれば、たいていのゲーム好きの人間とは楽しく会話ができるはず。
しかし、この先、もっと深く広い知識を得ることで、世界はさらに広がるだろう。
貴方がもっとも詳しいゲームのジャンル:
   ゲームシステム&テクニック
貴方がもっとも詳しいゲームの年代:
   90年代前半を中心としたゲーム発展期
   90年代後半から現在にかけての熟成期
--------------------------
エンタ検定実施中!
http://ent.nikkeibp.co.jp/ent/game/
あるぇー。こんなはずでは。 正直平均とは思いませんでした。もう少し自信はあったのですが。
理系の人々@Tech総研という漫画がありまして。

とりあえず私も、toyo君の体験談に似た体験をついこの間しました。

少し前、ううまうままうまうさうさ右脳左脳占いなるものがはやっていたころの話です。当然誰が何脳かという話になりまして、私も手と腕を組んだのです。結果は「ささ脳」でした。それに対するみんなの反応が、「うん、この占いは間違ってない」

さらにもう少しレベルが上がると有機物でなくなるらしいです。私はまだ有機物ですが。
なぜかよくわかりませんが酔っ払っています。まあいいや。

たしか昼間フラクタルの話があったような気がしたので、私が見たリンクを張っておきます。
田崎さんの日記経由
カネゴンさん経由
SANチェックを必要とするフラクタル
生協に行ったら平積みされていたBinary Hacksが無くなってました。

それともどこか違う棚に行ったのかしら。G.M.ワインバーグの本もいつの間にかなくなったと思ったら工学のシステム設計とかいう棚に移っていたことがあったし、その手のことかもしれません。本屋の本を探すのは苦手です。

アマゾンで勧められたC/C++セキュアコーディングを立ち読みしました。立ち読みなので「Cの文字列はバッファーオーバーフローします」「getsは絶対使うな」ぐらいしか読めず。これだけだと面白くないのでもうちょっと面白いところを見つけてから買います。
課題
シューティングゲームやらで敵を配置することを考えます。ある座標に、敵が、ほげほげな初期状態で出る、というのを全部書くわけです。

べた書きによる解法
一匹一匹座標と初期状態を配置していきます。ちまちま

構造化
敵の「群れ」を木構造で記述して貼り付けます。べたべたっと一気に大量の敵が配置できます。全体ちょっと右に動かしたい、なども簡単に出来ます。群れの群れのようなものを作れば、もっと大軍隊を生成することも出来ます。

もちろん構造化されたツールにおいても、一匹ずつ配置することは出来ます。ここには一匹だけという配置も出来る。

すると、ツールをうまく使える人はすごい木構造を作るために頭を抱え、使えない人は速攻でぺたぺた貼ってからあとで位置がちょっと違うという苦労をすることになるのでしょうか。

配置してみてテストプレイ。

>大体いいんだけど、ここの一匹だけ削れないかなぁ。

木構造の人が困る。

それはたぶん間違った抽象化だから。かしら。なんかちがうかも。

「そんな夢でした」「デパス増やしましょう」
結構前、Google Desktop検索が出てきたころ、こいつがブラウザの履歴まで検索することに感動したものです。「このあいだどっかで見たあれはどこの記事だっけ?」と思ったときに、キーワードで検索をかければちゃんと履歴が引っかかります。

しかし今はそれをやろうとしてもうまく動きません。理由はGoogle Readerです。以前はアンテナ経由で記事の更新だけ確認して、実際の記事は当該のページへ飛んで確認していました。今はリーダでRSSを読んで済ましてしまっているので、Google Desktop検索に残るような履歴になりません。そのため上のような恩恵が受けられなくなりました。

オチは?私のGoogle Desktop検索が古いとかありそうだなぁ。今はGoogle Desktopだしなぁ。


追記:Google DesktopをDesktop検索に修正

Cのmain蹂躙にインスパイアド。shinhさんにすでに書かれておるとかは気にしません。

Java言語仕様 実行を参照してください。 実行時はクラスロード→初期化→mainを呼ぶ、という順番になっているので、初期化中に仕事を済ませればよいというわけです。細かいところはVM仕様を参照します。後で後で。

まず基本形。

>type NoMain.java
import java.io.*;
public class NoMain{
    static{
        System.out.println("Hello world!");
        System.exit(0);
    }
}

>javac NoMain.java

>java NoMain
Hello world!

>

こんな感じで、mainなしのJavaプログラムが出来ます。

ところで、Java.System.exit()の周辺には Java.Runtime.addShutdownHookという関数があります。 こいつはCのatexitのように、exit後に実行する処理を指定できます。よってこれを使うことによって、mainを一度も呼ばないばかりか蹂躙するのと似たコードが出来るかしらと。

>type FlagMain.java
import java.io.*;
public class FlagMain implements Runnable
{
    private static FlagMain f=new FlagMain();
    public static int main=0;
    public FlagMain(){
        hoge();
        //System.exit(0);
    }
    public void hoge(){
        if ( main==0 ) {
            System.out.print("Hello ");
            Runtime.getRuntime().addShutdownHook(new Thread(this));
        }
        else
            System.out.println("world!");
        main++;
    }
    public void run(){hoge();}
}

>javac FlagMain.java

>java FlagMain
Hello Exception in thread "main" java.lang.NoSuchMethodError: main
Hello Exception in thread "Thread-0" java.lang.IllegalStateException: Shutdown in progress
        at java.lang.Shutdown.add(Unknown Source)
        at java.lang.Runtime.addShutdownHook(Unknown Source)
        at FlagMain.hoge(FlagMain.java:13)
        at FlagMain.run(FlagMain.java:19)
        at java.lang.Thread.run(Unknown Source)

>
???なんかまちがえたにょろ?
なんか理屈こねている間にtanakhさんに解かれてしまいました。やっぱり探索だけで終わりますか。書いてみましょう。いつか。
というか衰えておるな私は。

問題E。今回の問題の最難問のひとつです。解けたチームがなく、また大会後の解説ではあまりよくわからなかったので、いまだにどう解けばよいのかよくわかりません。

問題は、m×nのマス目中に2と3が二つずつ入っていて、それらを線でつなげることが出来るでしょうか、という、いわゆる「ナンバーリンク」です。ニコリのナンバーリンクとの違いはサイズが9×9までに制限されていることと、つなげる文字が二組しかないことと、あと線が通れないマスがあること。線の長さの合計のもっとも短いものを答えるので、当然線が入らないマスが出てくる、ということもニコリとは違いますね。

問題に書かれているサンプルの中に非常に親切なものがあり、それが解けるプログラムなら大丈夫かとはじめは思いました。しかしそのほかにもいろいろはまりそうです。 まず、線が引けるかどうかの判定だけで非常にたくさんのトラップが存在します。

______
__23__
__32__
______
______
_2323_
______
______
_232__
___3__
______
______
_232__
__×3__
______
____×____
_2__×__2_
_________
_3__×__3_
____×____

さらに、解をひとつ見つけてもだめで、線の長さを最小にしなければいけません。解をひとつ見つけ、そこから冗長な迂回路をなくすなどの手段が考えられます。しかしそのように解を徐々に変形させるだけでは最適解にたどり着かない場合がサンプルに載っています。どうしたものか。暇があったら考えます。

ところでMakegumiはやはりチーム名を考えたほうがよいのではないでしょうか。Nearとかに負けないように。某先生によるとk*という名前にすると非常に強いらしいので、たとえば「最強伝説黒沢」なんてどうでしょうか。
という提案をMakegumiの人にしたら、「そんなヤムチャみたいな名前じゃだめです」だそうです。まあ当然。
http://www.acm-japan.org/icpc2006/jp/
もう選手ではありませんが行って来ました。大学生プログラミングコンテスト。5時間で8-10問くらいの問題を解きます。今年は問題がかなり難化しているような。難易度はD<A<<<C<B<<<G<H<F<<<E<Iといった感じでしょうか。はじめ四問以外はだいぶ難しいです。

上海交通は今年も異常に強かった。序盤2問解いたところで失速し、その後なぜか問題Fを解いたので、「問題選択を間違えたのだろうか」と思っていましたが、その直後にものすごい勢いで風船を上げていました。終わってみれば二位のechizen.comに二問差でダントツのトップ。

二位以下は5問で時間差でechizen@Kyoto, kitsune-@UT, ((lambda(ry@Titechなどなど。去年の冬あたりからかなり練習して成果を挙げていたechizenが本番でも安定していましたね。国内予選からのリベンジといった感じでしょうか。oxyさん@echizenの記事で、
The Art of Computer ProgrammingでKnuthが悩んでた問題だったので、これは多項式時間で解く方法は無いだろうなぁと予想。
という判断をしているあたりが知識の豊富さ(とその活用例)を示しています。ちなみに私はThe Art of Computer Programming読んでません。目次見てあんまり興味を惹かれませんでした。反省。

東大が途中でだいぶ沈んでいて、ひどく心配しました。最終的にはkitsune-が変な問題を解いたりCLAGGANOが最後で追いついたりいろいろしていましたが。私が言えた話じゃないって?ごもっともでございます。
TaPLのCh. 21 Metatheory of Recursive Typesでずっと詰まってました。coinductionてなんやねん。
さかいさんが日記で紹介しているKnaster-Tarskiの解説を読んでなんとなく納得。具体的な半順序⊆についての記述では理解できず、一般的な半順序についての記述を読んで理解する不思議。

なぜ理解できなかったかは簡単です。「集合と論理学とを対応させるあれですよ」という記述が英語でわからなかっただけです。詳しい言い方はいまだにわかりません。

気づいてしまえば楽勝。そんなことはありません。その後の記述も結構難しいというか、
First-time readers may want to skip this material and jump to the next section. (初心者は迂回すべし)
と注がついていたので飛ばしてしまいました。
Google ReaderとOperaの相性があまりよくないです。記事を非同期で読み込んでフレームに追加している最中、ほとんど動作が出来なくなります。IEやFireFoxなら大丈夫なんですが....
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。