2010-02-01から1ヶ月間の記事一覧
関数に引数を束縛するbind関数のperl版。 sub sub_bind { my ($sub, @args) = @_; sub { $sub->(@args, @_); }; } 上位は呼び出すだけにしたい場合などに重宝する。
心に余裕が出てきたこともあってLispを再学習中。今は『実践Common Lisp』を読んでいる。やっと第12章が終わった。 思い返すと腰を落ち着けてプログラミング言語の勉強をやってない。何とか使いこなしているのはC言語とPerlくらい。どちらも仕事で使ってい…
『Binary Hacks ―ハッカー秘伝のテクニック100選』を読み終えた。 本書はその名のとおりGNU/Linux依存のハックが満載だ。ダンプを読み読みしたり、プロセスの中からプロセス情報を読み読み・書き書きしたり、etc。 抽象化には限界がある。移植性を完全に無視…
クロージャって何だろう? クロージャは関数と環境を一緒にしたものである。クロージャは、関数がレキシカル環境から何かを参照するときには暗黙に必ず作られている。 『ANSI Common Lisp』- 6.5 クロージャ より どんな風に使うのだろう? アキュムレータを…
Perlでリスト処理といえばmapとgrepにforeachだと思う。 たとえば、こんな感じで使える。実行すると"6 12 18 24 30"が標準出力に出力される。 #! /usr/bin/perl use strict; use warnings; # 要素に1から10を持つリストを生成する。 my @list1 = (1..10); # …
『プロダクティブ・プログラマ -プログラマのための生産性向上術』を読了。本書のテーマはプログラマの生産性向上だ。どうすれば向上するのだろう?道具の習熟度を上げて適切に使いこなせば良い。これが本書の結論だ。それを個別の、例えばショートカットの…
個人的にクロージャが使えればクラスの構文は要らないと思っている。例としてスタックを表すクラスをクロージャを使って定義してみる。まず、D言語で。
Javaにはtry〜catch〜finallyの例外フローが存在するけどC言語には無い。でも実現することはできる。こんな感じで使える。 #include <stdio.h> #include <stdlib.h> #include "exception.h" /* 例外フローの定義 */ /* 例外を投げる関数 */ void sub1(EXCEPTION *e) { printf("</stdlib.h></stdio.h>…
やっと『プログラミングClojure』を読了した。本書は薄いし分かり易い。入門や概要を掴むにはもってこい。訳も読みやすいし。ちなみにClojureとは、Java仮想マシン(JVM)上で動作するLisp方言のことである。Lispなので当然S式、つまりカッコだらけ。見た目は…
プログラム言語で最初のプログラムと言えばハローワールド。 もはや定番ですが分かりやすいとは言えない。例えば『プログラミング言語C』では最初に書くべきプログラムとして次の「ハローワールドを印字する」コードを掲載している。 #include <stdio.h> main() { pri</stdio.h>…
Perlはサブルーチンの引数を明示的に取り出さなくてはならない。 たとえば、数nを+1するサブルーチンの定義は次のようになる。 # 定義 sub inc { my ($n) = @_; $n + 1; } # 呼び出し print inc(255) , "\n"; # 256と表示 めんどくさい。Rubyっぽくしたい。 …