全然書こうという気が起こらない日記

振り出しに戻る。そのまま帰る。

地獄が見えたあの日から、俺の体に吹く風は、復讐の風、熱い風

2003/05/30

PythonとRuby

PythonとRubyは同じ世代で、同じニッチで、能力的にも同じぐらいのもの。というのは結構言われている。

日本では、開発者が日本人だし、日本語のドキュメントも豊富であるからかRubyの方が人気がある。日本でどのくらい人気に差があるかを実感するには、大きな書店に行ってIT関連やらコンピューター関連やらのコーナーを見れば良い。恐らく、言語やライブラリやソフトウェアの名前でアルファベット順に並んでいて、ズラッと並ぶ Perl に続いてPythonの本が片手で数える程あるか無いかで、ごっちゃにしてあればQtが続いて、次にRubyが沢山並んでいるだろう。

そんな中でなぜ僕はRubyでなくPythonを使うようになったのだろう。最初にPythonのソースコードを見たのは多分ninixのそれだ。その頃は文法を知らないし、全く理解できずにページャを終了した。次にPythonを使う事になったのはxsltプロセッサを探していたとき。VineのrpmにPythonを使ったxsltプロセッサの簡単なのがあったので使おうとした。結局それはいくつか問題があって今では使っていないのだが、本格的にPythonを勉強しようと思った直接のきっかけであったと思う。

2年前大学に入学して直後、図書館からPerlの本を借りて読んでいた。今ではPerlの文法もあやふやだが、当時は正規表現が使えて簡単で使いやすい言語だと思っていた。今Perlを使っていないのは、もっと良い言語を見つけたからである。つまり、Perlで自分がやろうとすることを全部カバーして、正規表現が使えて簡単で使いやすい言語。それはPythonの事ではない。shである。shがあるので僕にはPerlは必要なくなった。

Perlは、PythonやRubyの引き合いに良く出される。特にチュートリアルで言語の特徴を示す段階で。Perlを深く使ったわけではないし、Rubyについてはほとんど知識がない。どの言語が良いかと言う質問には答えられないが、Pythonは気に入ってる。RubyやPerlにはあまり手を触れようと言う気がしない。

Pythonが気に入っている理由の一つは文法だろう。javascript、Cと学んできたのもあるが、インデントによるブロックも、見出し行も最初は違和感があったけど今は好きだ。一方でRubyのendとか、Perl以来の関数の引数を括弧でくくらなくても良い辺りや$_やらはなにかイヤだ。別にRuby批判やPerl批判をしたいのではなく、個人的な感想なのでこれらの言語を厚く信奉する方々にはご容赦願いたい。

Rubyをまったく知らないというのもあれなので、Rubyのチュートリアルやユーザーズガイドなどを読んでいるわけですが、文法を知る度に「今更これを勉強するのはつらいなぁ」などと感じてしまう。もうだめかも。イテレータの価値もあんまり理解できてない。こいつは致命的だ。この先Rubyを使う必要にせまられなかったら一生おぼえないかも。

そんな訳でRubyについては食わず嫌いである。他に、有名で広く使われているけど学ぼうと言う気が起きない言語としては、javaとC++がある。javaについては、その特徴である一度書いたらどこでも走るというのが、その他のインタプリタ言語でもほぼ同じと言うのが大きいかもしれず。仮想マシンが無いと動かないと言うのは処理系がないと動かないと言うのとどう違うのかしら。もう変数宣言するのとかやだし、コンパイルすらめんどくさくなってきたし。

などと個人的な感情ばかりを書いて本日は終り。就職活動するときはshとPythonとLispだけで喰っていける会社をさがそう。

2003/05/29

学校サボってDebianいじる人

DebianでX Window Systemが立ち上がらなかったのは、どうやらUSBマウスが認識されてなかったからのようだ。というか、カーネル自体がUSBに対応していない。と言うわけでカーネルを再構築する必要にせまられた。

カーネルのソースをインストールするんだけれども、なぜかapt-getでは2.4.18までしかない。今動いているカーネルは2.4.20なのに。しょうがないのでdebianのサイトからソースをダウンロードしてきてつかう。

Linuxのカーネル再構築は最初の設定が異常に面倒。何が必要で何が必要でないのかよくわからん。そんな訳でカーネルを何度か作り直したりして時間を浪費する。

とりあえずInput Core云々のところでキーボードを有効にして、USBのところでキーボード、マウス、Wacomタブレットをモジュールに。Input Coreを有効にしてやらないとLinuxが立ち上がってからUSBキーボードが使えないと言う状態に。

Debianでは作ったカーネルもパッケージにできて、インストールは簡単。Vineでカーネルアップグレードするのは何やら面倒だった。

とりあえず、USB回りは使えるようになった。XF86Config-4 を修正。マウスのプロトコルを IMPS/2 に、デバイスは /dev/input/mice 。これでXは立ち上がるようになった。

立ち上がることは立ち上がるんだけれども、画面が4倍ぐらいに拡大されてる。この現象、FreeBSDのときもあったっけ。Xの設定なのか、ドライバがアレなのかよくわからん。FreeBSDのときはxf86configで何かの質問にnoと答えるとなおったような。

後は日本語環境を整備せねば。.Xresourceとかどうしようかと思っていたら、language-envなるパッケージを導入して、set-language-env -l ja とするといろんな.ファイルを作ってくれる。WindowMakerは文字が化け化け。

しょっぱなから日本語環境が全部整っているVineに比べると、FreeBSD、NetBSD、Debian Gnu/Linuxは環境を整えるまでが大変。パッケージは豊富にあるが、設定して使うまでには時間がかかる。なれたらどうってこと無いんだろうけど。インストールすべきパッケージはある程度まとめてリストを作っておいた方が良いかも。

つか Debianのパッケージはもうちょっとカテゴリ別にみられないんだろうか。どんなパッケージが存在するのかさっぱり分からないですよ。*BSDのportsやpackagesはjapanese以下のものを入れていけば良かったわけだが。ああ、dselectとかつかうのかな。

いじりかたはだんだん分かってきた。一方で環境を1から構築することのめんどくささを激しく感じている。いっそKNOPPIXをいれて、それを変えていこうかしら。

そういえば

WacomのタブレットがLinuxのX環境で動くんですよ。昔散々苦労して動かなかったのにいつのまにか動くようになってるんですよ。KNOPPIXで動くのは「ああ、さすが周辺機器の自動認識がすぐれているな」とおもっていたものの、Vineでも動いてる。カーネルをアップグレードしたときからかしら。

ただ、ちょっといけてないのは、マウスが絶対的な位置しか認識してないところだね。ペンはそれで良いんだけれども、マウスは一度浮かして別の所に置いてもポインタを動かさないでいてもらわにゃ。

あ、DebianでXF86Config-4にタブレットの設定なんか書いてないのに動いてたぞ。USBマウスとして見られてるのかね。

2003/05/28

最近のいろいろ

鬱々としたり、家帰ってすぐ寝たりしていたので書いてなかったこととかをだらだらと。

Debianは二つ目の基本パーティションにインストールしました。dselectのマニュアルやaptについての説明などは紙に印刷した。インストールしたての環境だと、ネットに繋がってなかったり、繋がっていても日本語が表示できないのでマニュアルが読めないと言うことを何度か経験したもので。XFree86をインストールしたけれども、うまく立ち上がってくれない。こうやって苦労して大きくなっていくんだなぁ。苦労してもどうやって解決したかメモしておかないと3週間ぐらいで忘れるわけだが。

もうひとつ。ネットに繋がるのに随分時間がかかる。squid入れてないからとか?

no title

reStructuredTextの致命的な欠点を発見しましたよ。英語とか単語ごとに分かち書きする言語を使っている分には問題ないんですが、日本語みたいに分かち書きをしない場合は困ったことになります。マークアップを単語レベルで、性格には空白文字で区切られた文字列ごとにしか認識してくれない。以下に例を。

今日は*ゴーヤチャンプルー*を食べました。

だとエラーが起きる。

今日は *ゴーヤチャンプルー* を食べました。

だとゴーヤチャンプルーの部分が強調される。英語だったら I ate *gumbo* today. となるわけで、何も問題ない。split()を使っているんだろう、と言うことは容易に想像できるけど、どうしたものかしら。

とりあえずクイックリファレンスを眺める。

In detail, the reStructuredText specification says that in inline markup, the following rules apply to start-strings and end-strings (inline markup delimiters):

  1. The start-string must start a text block or be immediately preceded by whitespace or any of ' " ( [ { or<.
  2. The start-string must be immediately followed by non-whitespace.
  3. The end-string must be immediately preceded by non-whitespace.
  4. The end-string must end a text block (end of document or followed by a blank line) or be immediately followed by whitespace or any of' " . , : ; ! ? - ) ] } / \ or>.
  5. If a start-string is immediately preceded by one of ' " ( [ { or<, it must not be immediately followed by the corresponding character from ' " ) ] } or>.
  6. An end-string must be separated by at least one character from the start-string.
  7. An unescaped backslash preceding a start-string or end-string will disable markup recognition, except for the end-string of inline literals.

4番7番あたりがとりあえずの問題解決のヒントになりそうな予感。要するにマークアップの終端文字列に続くのは空白か、区切り文字の類で無ければならないらしい。それはバックスラッシュでもよいらしい。バックスラッシュは続く文字列をそのまま表示するためのエスケープシーケンスになるので、バックスラッシュ自体は出力されない。これだ。

今日は*ゴーヤチャンプルー*\を食べました。とやってみたところ、今度は前のアスタリスクが認識されていない。今日は *ゴーヤチャンプルー*\を食べました。だと認識されるけれどもスペースが出力される。

docutils/parsers/rst/states.py の574行目からここらへんのキャラクタが定義されているもよう。splitじゃないじゃん。ここら辺に日本語の助詞とか括弧を追加してみようか。手軽だけれど、根本的な解決にはならない気がするなぁ。

2003/05/25

ためいき

何かが今一つすっきりしない。つかれてボーッとしている一方で、夜遅くまでプログラムを作って遊んでいたり。学校サボってみたり。買う金もないのにパソコンパーツとか中古のMacとか見に行ったり。

何かしたいんだけれども、何をしたら良いか分からない。地に足がついていない感じ。

多分今のままでは何かがいけないと感じている。環境を変えなきゃいけない。Debianに移行しようとしてるのもその一部。部屋の大掃除や模様替えもしてみよう。夏には旅にでも出ようか。

2003/05/23

マニュアルは穴が空くほど読みましょう

企業ディストリビューションでないDebianでは、サーバ上に700MBものCDイメージを置いておくのはあまり現実的でないらしく。jigdoなるシステムで個別にファイルをダウンロードしてCDイメージを生成するらしい。

CDのイメージは1から7まで番号がふってあって、一番サイズの小さい7番を選んでみた。昨日一晩かけて300MBぐらいのCDイメージを作ったものの、インストールする段階で何やらファイルが見つからない。

インストールを中止して、Debianのサイトをさまよい歩くと、ダウンロードすべきCDイメージについての説明があった。システムのインストールには、何はともあれ1番のCDが必要らしい。そして番号が大きいほど使用頻度の低いパッケージが含まれている。

ああ、ネットワークに無駄な負担をかけてしまいました。ごめんなさいごめんなさいごめんなさい。

ガラスの胃

このところ胸焼けが続いています。疲れ、睡眠不足、ストレスなどが腹に来ます。胃薬を買ってみたけど、安くはありません。

胃薬って胃酸の中和に炭酸水素ナトリウムを使っているみたい。成分のほとんどが炭酸水素ナトリウムのものもあった。胸焼けや胃酸過多だけだったら、重曹飲んだら良いんじゃないかしら。他にもいろいろ使い道があるみたいだし。

2003/05/19

はじめに

日付が既に変わっているけど19日分として。飯食べたの24時過ぎ。

Debianに移行しようかしら

今使っているVine Linux2.5に少し不満を感じつつある。パッケージの依存関係上古い版のソフトが入っていたりするんだな。Pythonなんかデフォルトで入っていたのは1.5なんだな。そこへ自分でこしらえたPython2.2なんぞが/usr/local/以下にぶち込まれているんだな。その他いろんなパッケージをみてみると、ずいぶん前の版が使われていたりするんだな。

もちろん、新しければいいと言うわけでもないだろうけども、意識的に使うソフトは新しい機能が追加されていたりするとそれを使ってみたくなるものでして。ここで言う「意識的に使うソフト」と言うのは、「あんまり使わないから、とりあえず動けばいいや」と言ったものではなくて、日々のパソコン使用の中心に添えられるようなアプリケーションで、しかも、そこに用いられている技術や言語に興味があり、それについてある程度の知識があるようなソフトウェアである。とはいえ、普段確かに使っているシェルとかsedとかgrepとか、そういったツールは、これ以上進化しないだろう(あるいは、新しい機能がついても今まで通りの使い方をする)からどうでもいい。ようするに追っかけをしたいようなソフトとか、使ってみたい、或はより使いやすくなった機能が増えたりしたものとか。

ディストリビューションをDebianに変えたところで、パッケージの依存関係には悩まされる様な気もする。Debianも安定版のリリースは随分間が空くから、安定版を使うとしたら古いものを使うことになったりするんだろう。最終的には、パッケージからは得られないものは自分で build して /usr/local/に置くことになったりするんだろうが、Debianは世界規模のディストリビューションである。日本人にあまり人気のないパッケージでも以外とアップデートされていたりするのではないか?そこがVineからの移行を見当する余地である(今のところ)。

とりあえず、もうちょっと調べてみて、ほとんどOSテスト用のパーティションと化しているスペース(現在NetBSDが入っている)へインストールしてパッケージ関連のツールとかの使い方を覚えて、いけそうだったら夏休みにでも移行と言う方向で。

GUIってめんどくさそう

今まで自分がCなりPythonなりシェルスクリプトなりで作ったツールと言えば、全部コマンドライン用のものである。どうせファイルの書き換え程度の仕事なので、コマンドラインの方が良いと言うのもあるけれども。たとえば素人向のツールを作ろうとすると、つまりユーザーがコマンドラインの使い方を知らないと言った場合、GUIがあった方が良いんでないか。

ところが、今までコマンドライン用のプログラムばっかり書いてきた為か、GUIのプログラムを見ると何か違和感があるのである。だって、アルゴリズムと関係ない部分で延々とGUIの設定してるんですよ? こんなんイヤですよ。

その上、ツールキットやOSとかの環境が変わるとその分またGUIのコードを書かなきゃいかんわけです。そこで、あたしぁ考えた。大概のGUIツールキットなんざぁ用意してるパーツの種類はだいたい似たようなもんだ。だからそれらをうまいこと表現できるメタ言語を用意してやって、それでGUIを書き表す。で、必要に応じてメタ言語から目的の言語、OS、ツールキットに応じて変換してやる。どうだい大将。簡単なもんだろうが。

とりあえず、XMLからXSLTTcl/Tkに変換してみようと思った。ボタンしか出来ないけど。

Python/Tkinter向のも作ってみた。ラベルもつけられるようにしてみたり。元のxmlにある成型用の空白文字類がそのまま出力されてしまうとPythonにとっては致命的。とりあえずルート要素直下の文字を取り去る。ルート要素直下にテキストを書けない仕様ということで。後の問題は、ボタンを押したときに実行される関数(コマンド)名がそのままではいけないと言う辺り。これは他の言語でも起りそう。

2003/05/14

誰だって不得手なものの一つや二つ

reStructuredTextでレポートを書こうかと思ったが、上付き/下付きの添字が書けなかったので、結局LaTeXで書くことに。

.. raw:: latex

    $X^1$

と言う風に書くとLaTex出力時だけそのように出力される様だけど、これはブロックレベルでの話で、インラインのテキストに対して同じようにはできないみたい。

PythonのコードはVimで書いているんだけど、:set expandtabしたほうが良いと思った。うーん。個人的にはtabでインデントする方が楽で好きなんだけれどもなぁ。

2003/05/13

目覚爽快 寝不足不快

葉山さんのところで紹介されている目覚爽快を買ってみました。確かに効きます。プラシーボ効果のような気もしますが。そして、確かに寝不足になります。

「こんなもん喰ってる暇あったら早く寝ろよ。」と言う皮肉った商品なのかもしれません。そういえば本日、人工知能の授業で電子計算機と脳を比較して、「脳は休むと言うことが重要である。」などという話をちょこっとしていたような気もします。それではみなさん…世界に一つしかない自分の頭を大切に!!

リストラ文章の実験

reStructuredTextからXHTMLを吐き出してみたが、マークアップがあんまりいけてない。HTMLへの変換スクリプトを書いた人が多分div厨房。

簡単にしやがれアホンダラ。PRE-HTMLとかXHTML2.0とかの方向性だなぁ。多分docutils.writers.html4css1.HTMLTranslatorのサブクラスを作ってやってセクションに関するところを作り替え……るとして、どうやって食わせてやったらいいんだろう。

環境変数 PYTHONPATH にあるディレクトリに、prettyhtml.pyとか作って、フロントエンドからの呼び出しをpublish_cmdline(writer_name='prettyhtml', description=description)などとすれば良いかも。

リストラ文章の実験の続き

とりあえず完成。利用方法は上記の通り。変更点のリストを以下に。

とりあえず満足。フィールドリストのテーブルも要らない気がするので外すようにしようか。

2003/05/11

フリーマーケットって

祖母のものを処分するために、フリーマーケットに出店するということで手伝いに行った。フリーマーケットって地元の人たちが、要らない生活用品を売ったり買ったりするところだと思っていたんですが、そんなことをやってるのはうちぐらいのもので、他の店はみんなフリーマーケットを渡り歩いて商売している様な人ばっかりでした。

そういう業者みたいな人たちは、あまり値段を下げないらしく、買いに来た人たちはうちで激しく値切ろうとします。100円の品を30円で買うぐらいの勢いです。せこいと言うかしみったれたというか、何ですかねこの根性は。処分が目的だからどうでもいいんですが(じゃあ言うな)。

2003/05/09

XMLに代わるもの

reStructuredTextについて書いた後で、葉山さんのとこを見ると、YAMLのページへのリンクが。dW:XML:XMLの論考ではXMLの代替としてYAMLを紹介した次の回でreStructuredTextを紹介しています。それらのさらに何回か前の回では、行指向でXMLとおなじセマンティクスを持つPYXを紹介しています。

reStructuredTextだけは文書向のフォーマットですが、文書と言うことに割りきってしまえば一番使いやすい気がします。

プログラミングで使うデータ構造ならYAMLがよろしいようで。PYXは一行一データなので、Unixツールが使いやすいですとか。シェルスクリプトでXMLを処理できますなぁ。要素名を入れ替えるだけならxsltより速いかも。

2003/05/08

リストラ文章

Python標準の文書フォーマットとしてreStructuredTextと言うものがあるそうで。plain textでありながらWYSIWYGに近いということで、優れたフォーマットかも知れません。

htmlにしてもxmlにしても、タグをだらだら書くのが面倒くさく、閉じ忘れたり、Validでなかったりと、標準的なテキストエディタで書くのはいささか面倒であります。いつぞや、roffみたいな書式のテキストからhtmlの断片を吐き出すフィルタなんぞを作りましたが、もっと簡単で、すぐ書けて、後から見ても分かりやすい様なフォーマットを探しておりました。

docutilsというPythonのモジュールをインストールするとreStructuredTextからhtmlやDocBook/XMLなどに変換するツールが手に入ります。

件のツールは展開したアーカイブのtoolsと言うディレクトリにある。日本語も扱えるようです。コマンドラインオプションでエンコーディングと言語を指定しないと、UTF-8でxml:lang='en'などとされてしまいます。-ljpとすると、$PYTHONLIB/site-packages/docutils/languages/__init__.pyでインポートエラーが起きます。languagesと言うディレクトリには、de.py en.py fr.py it.py sk.py sv.pyなど各国語向けのファイルがあるようです。jp.pyが無いのでエラーが起きたのでしょう。それぞれのファイルの中身を見てみると、文書中のキーワードとその言語での訳の辞書を設定している模様。筆者とか連絡先とか。そのうち書き直してプロジェクトの方に投げるとして、とりあえずjp.pyをen.pyのシンボリックリンクとして作る。これでlang='jp'と出力されるようになります。

関連リンクを以下に

Web原理主義

種々の文書について、様々な人々が、自由にリンクを作成しアクセスできると言うのがWeb本来の姿であると考えます。

アンテナからの捕捉はうれしいの半分怖いの半分、といったところでしょうか。困ると言うわけではありませんです。

2003/05/06

狙われている

葉山さんのアンテナに捕捉されてるのに気が付いた。今更。もういい加減なこと書けませんね。

理想と現実

百年の言語てぇリソースがありますですよ。ハードウェアが進歩、して高速CPU、大容量メモリで効率の悪いプログラムでもチャッチャカ動くんだったら、言語のコアを小さくして余計なデータ構造を省いてしまえば、より柔軟にプログラムを組めるようになるとかそんな話。文字列も要らないし、数値も要らない。リストで良いんだよリストでとかなんとか。

計算理論なんて授業をとってるんですが、足し算もないような世界から、種々の演算や関数を定義していく話。これと同じように言語も本当に小さいところから創れるんだろか。

(define add
           (lambda (x y)
                 (if (= y 0) x
                           (+ 1 (add x (- y 1))))))

足し算をこんな風に作ってみたところ、コマンドラインインタプリタだと1+334でもうスタックオーバーフローになる。輪講の課題のプログラムも考え方としては理想的だとは思ったけど、やっぱりスタックオーバーフローで止る。理想的なプログラムは、あんまり現実的ではない。特に頭山的な関数は。

速度を気にしてプログラムを書くのは面倒だ。処理が速いスパゲッティなコードよりも、分かりやすいコードの方がいいなぁ。作る方としては。

Unix方面で、マシン依存の速いコードより、どんなマシンでも動くシェルスクリプトの方が良いとか言う話があったっけ。Python方面では初期のバージョンをPythonオンリーででっち上げて、後からモジュールをCとかで実装し直す何て話もあったなぁ。

うーん。分散プログラミングとコアの小さな言語、柔軟性……何か新しいパラダイムが生まれてきそうな、いや、もう生まれていて良く分かっていないような、別に何も変わっていないような。

2003/05/05

例のプログラム

2日に書いたプログラムだけども、実家のパソコンのCygwinでは動かなかった。どこでエラーが起きてるのかも良く分からない。とりあえず放置。

schemeでは末尾再帰ってものを作ってやると無限ループが出来るらしい。普通に再帰頭山関数を作るとスタックに呼び出し元へのポインタ(アドレス? あと、変数の値とか)がたまって、いつかスタックオーバーフローになる。末尾再帰にするとスタックを消費しないらしい。でも、帰るところが無くなったりしないのかしら。

件のプログラムは桁数が10桁の所まで出力してスタックオーバーフローで止る。10桁の0/1の列でありますから、そのリストの中身は1024個ありまして、なんともはや。

風邪をひいたらしい

1日の観劇の影響かも知れないが、鼻が詰まる、喉が痛い、たまに咳き込む。SARSじゃないといいが。部屋も埃っぽいのであまりよろしくない。

2003/05/02

課題

輪講で宿題を出された。

「Σ={0,1}として、Σ*の要素を短い順に出力するプログラムを書け。」

すなわち、λ,0,1,00,01,……。

Cで簡単に出来るかと思ったら、ちょっぴりややこしいようだ。適当に書いていたら0101010101……と吐き出すプログラムになってしまった。

  1. 現在の桁数を表す変数を C とする。
  2. (C-1個の0)と0を出力。
  3. (C-1個の0)と1を出力。
  4. (C-2個の0)と1と0を出力。
  5. (C-2個の0)と1と1を出力。
  6. 以下略

と考えると再帰頭山関数を使った方が良いような気がする。Cがいくつまでと言う指定がないので、無限に続くかスタックオーバフローになるか、int型の最大値を越えて0に戻るのか知らないが。

別のアプローチ

続き。ΣとΣの直積を考える。Σ*中の{00,01,10,11}はΣ^2に他ならない。そして、その次に吐き出されるべきは、Σ^3である。すなわち、集合同士の直積を求める関数があれば、それを繰り返し用いて求めるΣ*を得ることができる。

そこで、集合の直積を求める関数を作る訳だが、Cで作ると汚くなりそうなので、最近はまっているLispで作ろう。guileが入っているのでこいつを使おう。

たとえば{鰯,鯖,鮪,鯛}と言う集合と{刺身,煮魚,焼き魚}と言う集合があるとして、この二つの直積を求めるにはどうしたらいいか。

  1. {鰯,鯖,鮪,鯛}と{刺身}の直積を求める
  2. {鰯,鯖,鮪,鯛}と{煮魚,焼き魚}の直積を求める

1番目と2番目の和集合が求める直積と等しいことになる。そんな訳で、ある集合と1個の要素からなる集合の直積が求められれば、任意の集合の直積が求められそうだ。

では、ある集合と1個の要素からなる集合の直積を求めるにはどうしたらいいか。つまりここでは、{鰯,鯖,鮪,鯛}と{刺身}の直積である。

  1. {鰯}と{刺身}の直積
  2. {鯖,鮪,鯛}と{刺身}の直積

と言うわけで、再帰頭山的な関数を使ってリスト処理してやればこれらが得られそうだということが分かるのである。Lispを使おうと言うのはそういう理由もあるのである。

ソースは以下。最後の2行はテスト用のコード。インデントがどうとか閉じカッコがどうとかは無視する方向で。

(define x '(0 1 2))
(define y '(3 4 5))
(define direct-product-of-atom 
  (lambda (a b)
    (if (null? a) ()
      (cons (cons (car a) (cons b ()))
            (direct-product-of-atom (cdr a) b)))))
(define direct-product
  (lambda (a b)
    (if (or (null?  a)(null? b)) ()
      (append (direct-product-of-atom a (car b) )
              (direct-product a (cdr b))))))
(write-line (direct-product-of-atom '(foo bar baz) 'hoge))
(write-line (direct-product x y))

recurciveの日本語訳

「再帰的」「帰納的」などの訳はややこしいので「頭山的」と訳しましょう。「言語と数学」水谷静夫著 森北出版 の受け売り。今から「頭山的」を流行らせてデファクトスタンダードにするんだ。みんなで「頭山的」を流行らせましょう。

2003/05/01

婆様が死んで、もう大阪に行くこともないだろうなぁと思っていたら、兄上が婆様の住んでいたところの近くに転勤になったそうだ。そこには母の親戚筋が一つあって、父の兄の奥さんの実家もあったりする。

休みじゃないんですよ

休みは土日月の3連休だけです。

屋上で芝居をするのはやめましょう

風が強く、大変寒かった。冬物の上着を持っていくべきでした。役者はほとんど下着みたいな格好だったのでもっとひどかったでしょうか。ブルブルふるえながら見ていましたが、話の流れはあまり覚えていません。

次の行動

  1. 入り口に戻る
  2. 昔のを読む
  3. 直帰
  4. この文章を添削する。
    1. 掲示板で白日の元にさらけ出す。
    2. メールでこっそり