2007-05-01から1ヶ月間の記事一覧

非決定計算

OnLisp曰く、プログラムに超自然的な力、すなわち未来を見通す力を与える方法。またある人いわく、天使の演算子(angel operator)。でも結局は、裏では全数探索をするのだけれども、プログラマにそれを意図させないだけなんだけどね。 たとえば、[1,2,3,4,5]…

非決定計算

30分プログラム、その43。id:Gemmaさん出題によるラグランジェの4平方定理。id:zyxwv:20070531に対抗してみる。ある自然数nが与えられた場合、 という等式を満す非負の整数a,b,c,dをすべて求める問題。(微妙にオリジナルと変えました)まず、callccで非決定計…

Pythonのyieldは継続じゃない

Pythonのyieldで非決定計算をやろうとして、失敗した。 yieldは自分の関数のなかでの位置しか覚えていないから、バックトラックには使えないというか、yieldが作るのはジェネレータであって、継続ではない。 try/catchが継続で実現できるのと同様に、ジェネ…

CPSで書いたmap

30分プログラム、その42。CPSでいろんな再帰関数を書いてみる。 python> fact(id,3) 6 python> append(id,[1,2,3],[4,5,6]) [1,2,3,4,5,6] python> reverse(id,[1,2,3]) [3,2,1] python> map(id,(lambda x:x*x),[1,2,3]) [1,4,9] python> foldr(id,(lambda x…

flist.pl

30分プログラム、その41。id:mzp:20070502:flistのPerl/はてな記法版。id:mzp:19000101:listにいままでの一覧を作りました。 $ perl croquis_list.pl ~/hatena/*.txt *list*[30分プログラム]30分プログラムリスト **Perl - [http://d.hatena.ne.jp/mzp/20070…

SEND MORE MONEY

30分プログラム、その40。もっと金をよこせ。有名なSEND+MORE=MONEY問題を問いてみる。 gosh> (send-more-money) (9 5 6 7 1 0 8 2)SEND(9567)+MORE(1085)=MONEY(10652)だから一応正解。遅いけれど。 (use util.combinations) (use util.match) (use srfi-1)…

bezier.rb

30分プログラム、その39。ベジエ曲線。ごぞんじの通りベジエ曲線は、4つの制御点をもとに曲線を書くための手法。各制御点をそれぞれ、(x0,y0),(x1,y1),(x2,y2),(x3,y3)とすると という式のtに0.0,0.1,...,1.0という値を代入して、得られる点を順にプロットし…

11.5 複数の値にわたる反復

p.163のサンプルコード。 (let ((w 0) (x 1) (y 2) (z 3)) (mvpsetq (w x) (values ’a ’b) (y z) (values w x)) (list wxyz)) 原文だと、 (let ((w 0) (x 1) (y 2) (z 3)) (mvpsetq (w x) (values ’a ’b) (y z) (values w x)) (list w x y z)) これは明らか…

7.8マクロのスタイル

p.103の説明。 だから新しいマクロの定義にgoを使うのは、既存のマクロが代わりに使えないときなら、必ずしも悪いことではない。 のgoはgotoの間違いだと思ったけれど、 Thus it is not necessarily bad style to use go in the definition of a new macro, …

5.6部分ツリーでの再帰

id:mzp:20070526:onlispに続いて、再びOn Lispの訳に異議を唱える。p.76のtrecの説明の最後。 以上より、rfind-ifはoddpによって以下のように表現できる: これの原文は、 Now we can also express rfind-if for e.g. oddp as: となっている。e.g.がついてい…

head.py

30分プログラム、その38。とっても不調。HEADリクエストをいろんなサーバに送って遊ぼう。 $ python head.py microsoft.com 301 Moved Permanently Connection: close Date: Sat, 26 May 2007 13:41:12 GMT Server: Microsoft-IIS/6.0 X-Powered-By: ASP.NET…

filter

On Lispを読み始めました。で、4章にでてくるfilterの訳について、ちょっと異議がある。 次の関数filterのsomeに対する性質は、remove-if-notのfind-ifに対する性質と似ている。組み込み関数remove-if-notの返り値は、find-ifに関数を渡してリストの一連のcd…

対話式Perl

30分プログラム、その37。PythonにもRubyにもHaskellにも.....ある対話環境がPerlにないのは不満なので、簡単なやつを作ってしまおう。 > 'a' => 'a' > $name = 'mzp' 'mzp' >"hello $name" => 'hello mzp'use strict; use warnings; use Data::Dumper; use …

hs

この日記は、はてダラで書いているのだけれども、毎回 $ hws $ hwとするのが面倒になったので、シェルスクリプトを書きました。 #!/bin/sh hws hw open http://d.hatena.ne.jp/mzp/ オマケとして、日記をブラウザで開くようにしてみた。

match.scm

30分プログラム、その36。util.matchを試してみよう。 (use util.match) (define head (match-lambda ((x . _ ) x))) (define tail (match-lambda ((_ . xs) xs))) (define fact (match-lambda (0 1) (n (* n (fact (- n 1)))))) (define (my-map f lst) (ma…

observable.rb

30分プログラム、その35。Observableモジュールを試してみよう。 $ ruby observable.rb 44 DigitObserver:44 GraphObserver:******************************************** 27 DigitObserver:27 GraphObserver:*************************** 27 DigitObserver…

pyunit.py

30分プログラム、その34。Pythonのユニットテストを試してみよう。 結論としては、あまり使いやすくない。TestCaseを継承したクラスを自動でかき集めてくれると嬉しいんだけどな。 import unittest class Counter: def __init__(self): self.count = 0 def i…

kaibun.pl

30分プログラム、その33。正規表現で回文判定。厳密な正規表現(正則言語)じゃ無理だけど、Perlの使う強力な拡張された正規表現ならできる。 $ perl kaibun.pl noon OK $ perl kaibun.pl eye OK $ perl kaibun.pl mzp NG $ perl kaibun.pl ごまたまご OK $ pe…

combinations.scm

30分プログラム。その32。util.combinationsの再実装。ネタに困ったら車輪を再発明すればいいんだ。 ;; 組み合わせ gosh> (print (combination 2 '(a b c))) ((a b) (a c) (b c)) ;; 順列 gohs> (perm '(a b c)) ((c b a) (c a b) (b a c) (b c a) (a c b) (…

pdf.rb

30分プログラム、その31。PDFをRubyで生成してみよう。インストールにとても手間取った。gemでcolor-toolsとtransaction-simpleを入れたあと、pdf-writerに日本語パッチを当てて手動でインストールする。 # -*- encoding:euc-jp -*- require 'pdf/writer' pd…

dango.py

30分プログラム、その30。リリカルLispにもでてきたリストをもとにした四則演算。ほかのところでも聞いたことある気がするけど、思いだせない。 >> import dango >> two = inc(inc(zero())) ['o', 'o'] >> three = inc(inc(inc(zero()))) ['o', 'o', 'o'] >>…

30分プログラム、リング

http://prog30min.ring.hatena.ne.jp/30分プログラムなリング。みなさまふるってご参加ください。

xmlrpc.pl

30分プログラム、その29。今回は、XML-RPCを試してみる。本当は、これで何かをするつもりだったんだけど、これだけで時間切れ。 use warnings; use strict; use RPC::XML; use RPC::XML::Client; use Data::Dumper; sub p(@){ print Dumper(@_); } my $rpc =…

clean.scm

30分プログラム、その28。一回休んでしまった。今回は、id:selvaggioあたりと話した掃除当番を割りふるプログラム。ルール 掃除当番は毎週交代 一度に三人づつ 2007/4/11より開始 $ gosh clean.scm (Alice Bob Charry) # 一週間後 $ gosh clean.scm (David E…

fizzbuzz.rb 3つ

30分プログラム、その27。眠いので、適当。今回は、最近話題のFizzBuzz問題。 1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリ…

擬似ハッシュ

30分プログラム、その26。そろそろ初めてから一ヶ月になるのか。今回は、Perlで実験的に取り入れられている疑似ハッシュ(Pseudo Hash)のRubyによる実装。 疑似ハッシュは、 {:age=>47,:eyes=>'brown',:weight=>60} のようなハッシュを、 [{:age=>1,:eyes=>2,…

GUIの違い

WindowsとMacでは設定画面のGUIがちょっと違う。Windowsの場合、「OK」「キャンセル」がついてる。(場合によっては、「適用」も) しかし、Macの場合、設定を変更するとすぐに反映される。 さて、Javaで設定画面を作る場合は、どちらに合わせるべきなのだろう…

色付きgrep

30分シリーズ、その25。ファイル名の部分を赤く表示するgrep。 $ pythno colorgrep.py hiki_fortune.py:#!/usr/bin/env python wc.py:#!/usr/bin/env python まず、color.pyを作る。 import sys Normal=0 Black = 30 Red = 31 Green = 32 Brown = 33 Blue = …

javax.swing.Box

javax.swing.Boxが結構使い勝手がいい。例えば、縦にボタンを並べたい場合は: Box box = new Box(BoxLayout.PAGE_AXIS); box.add(new JButton("button1")); box.add(new JButton("button2")); box.add(new JButton("button3")); box.add(new JButton("button…

db.pl

30分シリーズ、その24。DBを使ってみよう。SQLとかのデータベースとかじゃなくて、ローカルに保存しておける手軽なデータベース。 $ ls db.pl # keyにvalueを設定 $ perl db.pl set key value # dbというファイルに保存されている $ ls db.pl db # 値の取得 …