プログラムの最近のブログ記事
ネタ元 に触発されて色々one-linerで書いてみた。 お題としては「100万回乱数生成を行いその平均値を計算する」です。
Perl (5.10.1)
perl -MList::Util=sum -E 'say((sum map rand,1..1e6)/1e6)'
List::Util++
Python (2.6.4)
python -c 'import random as r;print sum([r.random() for x in xrange(1000000)])/1e6'
xrange(1e6)だとwarningが出るので、仕方なく若干長めに。
Ruby (1.8.7)
ruby -e 'p 1000000.times.reduce{|r,i|r+rand()}/1e6'
sumはなかったけどreduceが組み込みのおかげでやたらと短い
PHP (5.2.12)
php -r 'function r1($i){return mt_rand()/mt_getrandmax();} echo array_sum(array_map("r1",range(1,1e5)))/1e5;'
見た目も残念な上に 1e6 だと 何故か動かなくて2重に残念な子でした。
Gauche (0.8.13)
gosh -usrfi-1 -E 'print (/. (fold + 0 (map (lambda(x) (/ (sys-random) RAND_MAX)) (iota 1e6))) 1e6)'
久し振りにScheme書いたよ。
Bazaar 関連の覚書
いわゆる"リポジトリ"の概念は、
[repository/]branch/files...
な感じ。repositoryはoptionalなので、standalone-branchなんてのも可能。
- repositoryを作る
bzr init-repo [--no-trees] <repository>- repositoryはremote uri (sftp:// とか) 可
- --no-trees を指定しておくと、このrepository下に作成されるbranchはworking-treeを持たない(よくわからない...
- branch を作る
bzr init <repository>/<branch>- windows版のbzr 1.14では repositoryがremoteだと失敗する?
- → ローカルでリポジトリ作ってuploadするのはokらしい
<repository>/が無ければstandalone-branchになる。
- branchからcheck-out
bzr co <repository>/<branch> [dir]
メモメモ
co/update/ci と pull/push の違いがいまいちよくわからない。
standalone-branch を repositoryに追加する方法?
http://floralcompany.jp/archives/2007/10/libxml2mingw32.html の続き。
libxml2 を --disable-shared 付きで ./configure したら(?) リンク時に
undefined reference to '_imp__xmlFree' が出るようになった。
ぐぐって見たら以下の解決(?)策が見つかりました。
http://mail.gnome.org/archives/xml/2004-February/msg00004.html
libxml/xmlexports.h の
/* Windows platform with GNU compiler (Mingw) */
#if defined(_WIN32) && defined(__MINGW32__)
#undef XMLPUBFUN
#undef XMLPUBVAR
#undef XMLCALL
#undef XMLCDECL
#if defined(IN_LIBXML) && !defined(LIBXML_STATIC)
の部分を
/* Windows platform with GNU compiler (Mingw) */
#if defined(_WIN32) && defined(__MINGW32__)
#undef XMLPUBFUN
#undef XMLPUBVAR
#undef XMLCALL
#undef XMLCDECL
#if !defined(LIBXML_STATIC)
に変えるだけらしい。(defined(IN_LIBXML) が無くなってる。)
ネタ元: http://twitter.com/hi_saito/status/1524994613
の元ネタ: http://d.hatena.ne.jp/mzp/20090414/hello
のさらに元ネタ: http://d.hatena.ne.jp/Yuichirou/20090414#1239705258
を、見ていたのですが、激しい違和感が...
一番元ネタの設計を日本語で表すと概ね以下のようになると思います。
- ようこそ は名前を持っています
- ようこそ に喋れ(say)というと "こんにちは"に続いて名前を印字します
- オブジェクト指向的HelloWorldとは ようこそ に「世界」という名前を与え、喋らせることです。
何か違わないか?
というわけで、自分なりに オブジェクト指向的HelloWorldを再設計してみた
ハノイの塔 をたくさんの言語で。
唐突に書きたくなって、頑張って色々書いてみた。(残念ながらスタック型言語(Brainf*ckとかwhitespaceとかは無い)
ハノイの塔回答プログラムのポイントはおおよそ2点
- 関数/サブルーチン等の再帰呼び出し処理
- 経過を出力する際の文字列フォーマッティング
それでは、どうぞ
帰ってblogに書くまでがLLです。
というわけで、もう既にイベント終了から40時間余り経ってしまってますが、llfuture に行ってきたので、簡単に感想など。あまり参考にはならないのでご注意。
なんか、公式がトラックバックくれって言ってるのでやっておこう。
トップページが寂しくなってきたのでとりあえず投下
さて、どうやりましょ。ビギナなら
void func(int cond)
{
int n;
if ( cond )
n = 0;
else
n = 1;
}
なんてのもありですかね。しかしこの程度なら3項演算子を使って
void func(int cond)
{
int n = cond ? 0 : 1;
}
の方がスマートですね。しかし条件が複雑になってくると3項演算子では読みにくくなるので、前者の方がよいかもです。
オライリー・ジャパンの協力の下作られたそうで、真ん中にPerl(駱駝)、Python(ニシキヘビ)、Javascript(サイ)、後その周りもオライリーの動物本に出てるものと思しき動物たちが色々います。
が、キリン??キリン本なんてあったっけ?? (ぐぐってみたら初めてのRubyでした。なるほど。しかしなぜオライリージャパンのオンライン書籍一覧に載ってないのか...(と思ったらオライリー・ジャパンのトップページの方にいたよ。
個人的には後襟のGauche?(ハコフグだっけ?)がちょっとお気に入りです。
dankogaiさんの nested list comprehension のperl版に対抗(?)して、
eval() を使わない版を書いてみました。
# 2008-07-08 追記 コードが長いので続きに移動しました。
Project cyrusのcyrus imapにmakedependのソースが同梱されているらしいので、makedependだけビルドしてみた。
後、あるとすると、X.orgのソースの中なんだろうけど、ちょっと探す気がしないなぁ...
- 前提条件:MINGW32環境、MSYS環境構築済み
xmlsoft.org (libxml 関連のサイト)からリンクをたどって、ソースファイルのtarball を落としてくる。
とりあえず今回落としたファイルのバージョンは2.6.30 (libxml2-sources-2.6.30.tar.gz)
- 適当なディレクトリに展開し、MSYS環境下でそのディレクトリに入る。
- 何はなくともconfigure
mingw関連は /mingw 以下に入れてあるので、 --prefix=/mingw/local でいいかな。
その他、いらないものをそぎ落とす。
--without-docbook --without-ftp --without-html --without-http --without-iconv
--without-legacy --without-python --without-threads --without-zlib
(左から、DOCBOOKサポート、FTPサポート、HTMLサポート、HTTPサポート、libiconv (文字コード変換ライブラリ)サポート、deprecated APIサポート、pythonサポート、multi threadサポート、zlib使用
そして、make install (make testはなかった..)
エラーは出ず、makeは完了したようです :D
結構有名な駄洒落だというのは知っていたけど、辞書に載ってるとは思わなかった。
Read The Fucking Sourceの上品なバージョンとか言ってますな。
ちなみに、インストールとかに困ったときは、 "Use the --force, Luke" も有効ですね :)
世間の一部的にはHalloweenらしいので、それらしい記事を..
問1:
> cat halloween.c
trick or treat
である、halloween.c をコンパイル・実行せよ。
問2:
> cat halloween.cpp
trick or treat
である、halloween.cpp をコンパイル・実行せよ。
問3:
> cat halloween.pl
trick or treat
である、halloween.pl を実行せよ。
問4:
trick or treat
のみ書かれているソースコードをコンパイル・実行できるプログラミング言語を挙げよ。
何とはなしに、fj.1st-readme のfj年代記を見ていて、
I18Nが「"Internationalization"の中18文字省略」という意味であるということを知りました。
「国際化」というキーワードは知っていたけど、まさか中省略とわ...




