トップ 最新 追記

Route 477



2006-06-04

[zaurus] SL-C1000

買っちゃった。(中古だけど)

電車の中で変愚をやろうという魂胆だったんだけど、まだコンパイルできてない。 ここのxangbandがターミナルで動いている程度。 文字がちっちゃくてしんどい(笑)。

コンパイルのためにLinux環境を整える必要があって、せっかくだから きまぐれ日記:colinux から VMware Player に乗り換え を参考にQEMU + VMware Player + Debian(testing)という環境にしてみた。上のページからリンクをいくつか辿って、手順どおりに やればインストールは簡単。ネットワークの設定が一切不要なのが嬉しい。

とりあえず、今は LinuxZaurusの常識・非常識/ゼロからのX/Qt を参考にX/Qtを入れてみたところ。


2006-06-08

[ruby] injectとto_proc

いまさらだが、to_procってinjectと組み合わせても便利なのね。

irb(main):005:0> class Symbol ;def to_proc; Proc.new { |obj, *args| obj.send(self, *args) }; end; end
=> nil
irb(main):006:0> [1,2,3].map(&:to_s)
=> ["1", "2", "3"]
irb(main):012:0> [1,2,3].inject(&:+)
=> 6
irb(main):013:0> [1,2,3].inject(&:*)
=> 6

整数の配列の和を求めるのにブロック書くのはめんどい!と思ってた(よくArray#sumとか定義してた)んだけど、 array.inject(&:+) くらいなら許容範囲か。


2006-06-12

[ruby] 人工無脳

人工無脳についてのメモ(RubyKaigiの資料より。とりあえずRubyで書かれたものだけ)


2006-06-13

[lab] 輪講

輪講の発表の準備。5人で回しているのでこれで2回目。時間的に3回目はなさそうだなぁ。

知らない単語が多くて困る。

  • reccurence relation : 再帰関係
  • lurk : 待ち伏せする、潜在する
  • versatile : 用途の広い
  • closed form : 閉形式
  • binomial coefficient : 二項係数

[softs] パワポ

行頭で「n人の」とか書くと勝手に「N人の」に直しやがって、こいつめ。

ツール-オートコレクトのオプションから設定できた。

あとツール-ユーザー設定から、上付き文字と下付き文字をツールバーに追加してみた。 D&Dで設定できるUIはいい感じ。

しかし「ユーザー設定」っていうネーミングはどうかと思うが(どう見ても「ツールバーの設定」だろう)。

[tDiary] 途中保存

書きかけの日記を途中で保存できる機能が欲しいなぁ。

GMailみたいな感じで。

[junk] 月齢

どうも、満月の前後はアウトプットが増える傾向がある(気がする)のだが、どういうメカニズムなんだろ。

日記の量と月齢をグラフにすると面白いかも知れない。

参考:月齢カレンダー


2006-06-14

[vim] フィルタ処理

vimで、編集中のファイルをRubyで加工しようとして

:%!ruby -pe "$_.reverse!"

とやると、

-e:1: syntax error
$_.reverseruby -pe $_.reverseruby
                     ^
-e:2: syntax error
$_.reverseruby -pe $_.reverseruby -e 'p ARGF.read.map{ <C:/DOCUME~1/yhara/LOCALS~1/Temp/VIiEF.tmp |s| s.split(/\\|/).map{|s| s}'
                     ^
-e:2: syntax error
$_.reverseruby -pe $_.reverseruby -e 'p ARGF.read.map{ <C:/DOCUME~1/yhara/LOCALS~1/Temp/VIiEF.tmp |s| s.split(/\\|/).map{|s| s}'
                     ^

のような謎のエラーになってしまうのだが、どうしたら良いのだろうか。(「|」が特殊な記号っぽい?)

素直にrubydo使えということか(^^;

[lab] 輪講(2)

昨日のつづき。

  • implication : 暗示
  • estimate : 概算する
  • convex : 凸
  • lattice : 格子
  • ascend : 上る
  • ridiculous : ばかげた
  • stumble : 遭遇する、偶然見出す
  • conjecture : 憶測、推測

関係ないが、この前の発表前日も某アーケードゲーム(検索回避)の解禁日だったなあ。


2006-06-19

[prog] Lispはなぜ凄いのか

KMCでは、毎週のミーティングのときに誰か一人が15〜30分程度の発表(「講座」という)を行う習慣がある。 今日は僕がLispに関する話をしたので、せっかくだからその内容をメモっておこうと思う。


内容は「Lispはスゴいという話をたまに聞くけど、何が凄いの?」という話。 Lispの凄いところは2つあって、1つは「動的」「GC」「高階関数」など最近プログラミング言語に搭載されるようになった機能を、'59年に既に備えていたということ。 (ちなみに最初の高級言語であるFORTLANができたのが'57年で、Lispは「2番目に古い高級言語」だったりする。) *1

ここでLispの歴史について少し。'57年に最初の版ができて以来たくさんの方言が作られたが、 現在はCommon LispとSchemeという2つのLispがよく使われている。 違いは、Common Lispがそれまでの方言の スーパーセットを目指したのに対し、Schemeはできるかぎりシンプル(かつ、強力)な仕様を目指したところ。 *2

LISP系言語はSchemeとCommon Lispを二大潮流とするが、提案された機能を原則全て導入するCommon Lispに対して、メンバーの全員一致を原則とするSchemeという特徴を持っている。

[wikipedia:Schemeより引用]

さて、もう一つは、「マクロ」と呼ばれる強力な機能を備えていること。マクロというとC言語の「#define ...」を想像するかも知れないけど、Lispのマクロはそれよりもずっと強力。 例えば、Haskellでは [ x*x | x in [1,2,3] ] と書くと [1,4,9] というリストが得られる(リスト内包表現)んだけど、Lispでは同じような機能をマクロで書くことができる

(list-of (* x x) (x in '(1 2 3 4 5)))
=> (1 4 9 16 25)

このlist-ofは、関数ではない。関数だとすると実行するまえに引数が全て評価されるはずだけど、「(* x x) を計算した結果」がlist-ofに渡っても仕方がないよね。「(* x x) というコードそのもの」がlist-ofに渡らないといけない。この「コードそのもの」を扱える点が、マクロと関数の大きな違い。

さて、このように強力なマクロだが、なぜ他の言語ではあまり採用されていないのか? その理由の一つに、マクロがLispの「データとコードを同じ形(S式)で扱う」という特徴に拠っていることが挙げられる。 「コードをそのものを渡したい」と思ったとき、他の言語ではどうすれば良いだろうか?文字列?うーん。 Lispでは、コードはS式(リスト)で書かれるから、シンボルのリストを渡せばよい。

list-ofは

(define-syntax list-of
  (syntax-rules ()
    ((list-of expr ...)
      (以下略)

のように実装される。exprにlist-of以下のコードが(リスト形式で)渡されるわけだ。 *3

つづく(かも?)

*1 最初のLispはFORTLANで実装されていたらしい

*2 ちなみにEmacsの拡張言語であるEmacs LispはSchemeよりはCommon Lispに似ている。でもCommon Lispとは違う。xyzzy(Windows要のEmacs風エディタ)はCommon Lispを採用している

*3 ちなみにこのマクロはLispの一方言であるSchemeのコードだが、「...」は僕が省略したわけではなく実際に「...」と書く。識別子にいろいろな記号を使えるのもLispの特徴の一つである(識別子は必ず空白で区切られるので、記号を使ってもまぎらわしくならない)。


2006-06-25

[prog] キミならどう書く 2.0 - ROUND 1 -

Befungeで書いてみました。

>v         >125*25*pv
            v       <       >        v
            >25*25*g 1+:25*`|
                                                        > v
                            >:25*25*p >25*25*g + :55*4*`|
            ^                                             <
                                      ^              <
                                      >:::25*%\25*/p ^
                        >25*,@        ^                 <
            v                        <
            >0>1+:55*4*`|            v    <
 >         ^            >::25*%\25*/g 48*-|
                                          >:.v
              ^                      <       <
yhara@cosmos:~/src/befunge % ./a.out primes.bf
Befunge-93 Interpreter/Debugger v2.12
2 3 5 7 11 13 17 19 23 29 31 32 37 41 43 47 53 59 61 67 71 73 79 83 89 97

Befungeについては、こちらを参照。

自分で動かしてみたいという奇特な方は、http://quadium.net/funge/downloads/ から 処理系(Cのソースコードと、Windows用EXE入り)を入手してください。


2006-06-30

[prog] ICPC 国内予選

予選落ちしてきました。(^^;

問題はA, B, Dが比較的簡単で、Eがちょっと大変、C, Fが難しめ、という配分。 京大は例年にないチーム数でしたが、4問解けたのが1チーム、3問解けたのが3チーム…という感じでした。

僕のチームは3問正解だったけど、4問目が解けていれば予選通過だったことを考えると、ちょっと悔しいですね。 まあ3問正解する程度の能力だった、ということで。4問正解する程度の能力にランクアップするには、 もうちょっと速く解けるようにならないとなぁ。考えるより、実装とかデバッグに時間を取られてる感じだったので。