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

Gauche-FUSE試してみた

id:GemmaさんがGauche-FUSEというライブラリを作ったようなので試してみた。exampleのhello.scm, fusexmp.scmについては問題なく動いたのだけど、outputz.scmがうまく動かない。実行すると以下のようなエラーが出る(追記:勘違いでした。ちゃんと動いている…

プログラミング言語の難易度

Javaはわりと素朴な言語だ。 Rubyは簡単な英語をちょっと知っていれば分かってしまうくらい易しい。Perlもまぁだいたい同じくらいだ。 Cなんて、小学生でも、ともすれば幼稚園児でも、理解が可能だ。 C++やC#なんかは慣れない人は戸惑ってしまうかもしれない…

Scalaって末尾再帰の最適化してるの?

Scalaの勉強中。Scalaはオブジェクト指向でありながら、関数的にもプログラムを書けるという特徴を持っているとのことで、「だったら末尾再帰は最適化されるよね?」ってことでバイトコードがどうなってるのか調べてみた。 結論からいえば、d:id:mzp:2008111…

lim[n→∞]√2↑↑n=2

日曜日にCSNagoyaのSICP勉強会に参加していて、タワー記法が出てきた流れで、だ(と思う)という話をしたら、id:yoshihiro503さんとid:mzpさんから意外とよい反応をいただいた。 証明をちゃんとつけてなかったのだけど、帰り道で考えていたらわりと簡単に証明…

漢数字を整数リテラルとして使えるようにする

漢数字で九九の表を作ってください。 ただし以下の条件をつけます。条件 一.アラビア数字(0〜9)禁止。 プログラムにも出力結果にもアラビア数字を含んではいけない。(全角・半角とも) 二.結果の数字は、「七」とか「一○」(=10)とか「六四」(=64)のよう…

Scheme どう書く?的

整列済みの number のリストがある。'(1 3 4 5 6 12 13 15)このようなリストで数が連続している部分は '(1 2 3) -> '(1 . 3) のように両端のみを書くような記法を導入する。最初の例のリストであれば以下のようになる。'(1 (3 . 6) (12 . 13) 15)このような…

Re:Schemeはツンデレ

Schemeはツンデレより。個人的には、ツンデレっていうより「ささやかな優しさ」って感じですね。 僕が「○○作りたいなぁ」ってボソッとつぶやいたのを隣でこっそり聞いていたすきぃむちゃん。僕が席を離れてる間に机の上に○○を作るための道具一式を置いておい…

SRFI 42でFizzBuzzとフィボナッチ

SRFI 42は、下のようにいろんなデータでのループに使うことができる。 gosh> (list-ec (: x 1 10) x) (1 2 3 4 5 6 7 8 9) gosh> (list-ec (: c "ABCDE") #`"char-,c") ("char-A" "char-B" "char-C" "char-D" "char-E") gosh> (list-ec (: x '#(1 2 3) '#(4 …

Brainfuckコンパイラ

id:mzpさんがBrainfuckインタプリタを作っていたので、なんとなくBrainfuckからSchemeへのコンパイラを作ってみた。こんな感じになってます。 (define (char->symbol c) (string->symbol #`",c")) (define (inst-name->cont name k) (lambda (x) (k `((,(cha…

13日の金曜日を数え上げる

今日から20013年12月31日までの、13日の金曜日とその総数を表示してください。 どう書く?org lequeさんのを参考に改変。list-ecを使ってるのに、さらにdropやfilterを使うのはなんだかもったいない気がするので。でも結局元のコードより長くなってるってい…

オープンソースのクールなイースターエッグ10選

みたいな訳になるんですかね。10 Cool Open Source Easter Eggs | The Linuxologist 10 Cool Open Source Easter Eggs | Bringing Linux to the Masses 何がすごいって、コメント欄に書いてあった $ telnet towel.blinkenlights.nl するとターミナル上でスタ…

文字列に含まれる単語の最初の文字を大文字にする

文字列に含まれる単語について、それぞれの単語の最初の文字を大文字にしてください。たとえば、"LL future" と与えられたときは "LL Future" と出力する。"LL day and night" と与えられたときは "LL Day And Night" と出力する。 どう書く?org こんな感じ…

「こんなプログラムを書いてみよう」 in Scheme

文字列の集合{ BAB, AAB, BAA, AAA, ABA }があるとき、これらのすべてを1回ずつ含み、かつ、3文字の部分文字列としてはこれらの文字列しか含まない文字列は、BABAAABとBAAABABの2通りある。文字列の集合が{ BAB, AAB, BAA, AAA }のときは、そのような条件で…

GaucheのMOPいじり

Gaucheでは、クラス、クラス、クラスをサブクラス化することでオブジェクトシステムの振る舞いをカスタマイズすることができる。 をサブクラス化したクラスをメタクラスにもつようなクラスを定義するには、 (define-class <myclass> () () :metaclass <myclass-meta>) とすればいい</myclass-meta></myclass>…

The Art of the Metaobject Protocol 1章まで読んだ

MOP

ちまちま読んでるので、ようやく1章を読み終えて今は2章の途中。1章では、ClosetteというCLOSのサブセットを作ることによってMOPの仕組みを学ぶ。読み始める前は、メタオブジェクトというと「何やら抽象的でよく分からないもの」という印象だったのだけど、 …

第4回SICP勉強会

今回は1.2.2 木構造再帰と1.2.3 増加の程度について。ようやく勉強会らしくなってきた感じ。問題1.14のcount-changeのステップ数のオーダを求めるのでかなりてこずってたけど、id:banjunの解法により、どうやらO(n^5)らしいということで解決ということに。…

The Art of the Metaobject Protocol

The Art of the Metaobject Protocol作者: Gregor Kiczales,Jim des Rivieres,Daniel G. Bobrow出版社/メーカー: The MIT Press発売日: 1991/07/30メディア: ペーパーバック クリック: 35回この商品を含むブログ (14件) を見る積ん読状態の本が溜まってるの…

コメントの削除

ソースコードからコメント部分を削除するプログラム decomment を書いてください. すくなくとも,decomment を記述したのと同じ言語で書かれているソースコードが 扱えるようにしてください. どう書く?org (use file.util) (define (main args) (dolist (…

チョコレートパズルを継続渡しで(30分で解けるようになった)

ペントミノ パズル(明治ミルクチョコパズル)をGaucheで解く(1時間で解けるようになった) - Gemmaの日記とのことなのでここは意地で対抗。id:Gemmaさんの初めのコードと同様、重複を除去してなかったのでそれを検討。いろいろ思案してたけど、よくよく考えて…

チョコレートパズルを継続渡しで

以前に作ったチョコレートパズルを継続渡しで解くプログラムを見つけた。せっかくなので載っけとく。継続を使ったサンプルプログラムって結構数が少なかったりする(と思う)ので、まぁ誰かの参考になれば嬉しい限り。チョコレートパズルについて詳しくは各自…

PLT Scheme version 4.0 is now available

PLT Scheme version 4.0 is now available from http://plt-scheme.org/This major new release offers many improvements over version 372, and we encourage everyone to upgrade. The Racket Blog とのこと。PLT Schemeはあんまり使ったことないけど、以…

チケット購入

火曜日の話だからちょっと時間が経ってるけど、LL Futureのチケットを購入。一応Tシャツ付き。

私をLL Futureに連れてって

是非誰か。ってまだチケット売り切れてないんかな? LL 2008 実行委員のともだちから「今年の LL 2008 には Larry Wall が来るかもよ」というささやきを受けた。早速ローソンに走るワタシ。 絶対に失敗しない LL2008 チケット入手@ガンダム風 - 8tree にっき…

評価戦略

正規順序や作用的順序などについて、もう一度調べてまとめようと思ってたけど、Wikipediaに詳しくまとめられてたのでそちらで代用。 Evaluation strategy - Wikipedia, the free encyclopedia 評価戦略 - Wikipedia ところで、厳密にいえば作用的順序もcall …

第2回SICP勉強会

今回はSchemeのイントロダクション。「Schemeでは+や-も関数で、前置記法で書くよー」とか「定義はdefineで書くよー」とか。 しかし、人にものを教えるっていうのは想像以上に難しい。特殊形式の説明でパニクりました(始終パニクってたという見方も)。それか…

Types and Programming Languages

Types and Programming Languages作者: Benjamin C. Pierce出版社/メーカー: The MIT Press発売日: 2002/01/04メディア: ハードカバー購入: 5人 クリック: 86回この商品を含むブログ (52件) を見る卒研のためにTAPLをチビチビ読み進めてます。と言ってもすべ…

与えられた木から、子→親への対応を作る

与えられた木から、子→親への対応を作るより。 (define (get-parent-alist tree) (define (rec root children) (append-map (lambda (child) (acons (car child) root (rec (car child) (cdr child)))) children)) (rec (car tree) (cdr tree))) 15分強。app…

Project おいら

Project Eulerにあらず。自分で思いついた問題を自分で解く試み。 というか、偶然直面した問題を、抽象化して手を加えたらパズルのような問題になったので、とりあえず解いてみたってだけ。非負整数を1個以上の0以上(または1以上)の整数の和の形で表す表し方…

プログラミングに数学は不要?

あなたがプログラムを理解できない10の理由:第2回 - builder by ZDNet Japanより。 しかし、本当に数学の知識が必要になってくるのは、ゲームのプログラムや科学技術計算をするような高度なプログラムが必要になった時だ。PHPや JavaScript、ActionScriptな…