final const readonly

値を書き換えるつもりのない変数を宣言することがある。ローカル変数や関数の引数の場合もあれば、メンバ変数の場合もある。 Javaの場合、このような変数を宣言するときにはfinalと書いておくと、コンパイル時にチェックできる*1。 C++にもconstという似たも…

finallyの中でreturn

Javaのfinallyはよくできていて、tryやcatchの中から抜けるときは必ずfinallyが実行される。 tryの中身の最後のステートメントが実行される returnやcatchしてない例外でメソッドごと抜けようとする という場合にも、必ず実行される。 returnの場合には まず…

パラメータで受け取った型のインスタンスを生成

C++のTemplateとJavaのGenericsを比べるとき、 パラメータで受け取った型のインスタンスを生成できない という話が出てくることがある。 import java.util.Vector; class Elem { } public class Test { // しかるべき方法で初期化された、要素数nのVector<T>が</t>…

2回適用の組み合わせ方

次のような関数daを考える。 (define ((da f) x) (f (f x))) これが何をする関数なのか、日本語での説明を試みよう。 fを受け取って、「xを受け取って、xにfを2回適用する関数」を返す関数 「〜を受け取って〜を返す関数」という言い方が入れ子になっていて…

(let (''a) quote)

Schemeの式 '1 ''1 は、ふつうの環境では以下のように評価される。 gosh> '1 1 gosh> ''1 '1 ところで、'aという式は、読み込まれるとき(quote a)の形に展開される。だから、'1と書くかわりに(quote 1)と書いても、まったく同じ意味になる。さてここからが本…