Scheme
Schemeを覚える。
http://www.shiro.dreamhost.com/scheme/index-j.html
Gauche
Schemeインタープリタ
http://www.shiro.dreamhost.com/scheme/gauche/index-j.html
debian にインストール
確認
# gosh -V
Gauche scheme interpreter, version 0.8.3 [utf-8,pthreads]
終了
gosh> (exit)
traceを使う
gosh> (use slib)
gosh> (require 'trace)
gosh> (trace fac)
objective-C
Objective-Cの覚書
◆クラスの宣言
@interface クラス名 : 親クラス名
{
インスタンス変数;
@public
公開するインスタンス変数;
@protected
サブクラスからのみアクセス可能なインスタンス変数;
@private
非公開のインスタンス変数;
}
メソッド宣言
@end
◆メソッド宣言(インスタンスメソッド)
- (戻り値型) メソッド名 : 仮引数リスト … ;
◆メソッド宣言(クラスメソッド)
- (戻り値型) メソッド名 : 仮引数リスト … ;
◆ラベル
- (戻り値型) メソッド名 : (引数型1) 仮引数名1 ラベル名2 : (引数型2) 仮引数名2 … ;
◆クラスの定義
@implementation クラス名
メソッド定義
@end
◆クラスメソッドの呼び出し
[クラス名 メソッド名 : 引数0 引数1 …];
◆インスタンスメソッドの呼び出し
[インスタンス名 メソッド名 : 引数0 引数1 …];
◆コンストラクタ
メソッド( -(id)init; )を用意する。
◆デストラクタ
メソッド( -(id)free; )を用意する。
◆インスタンスの生成と開放
id obj = [HogeClass new];
[obj free];
◆クラスオブジェクトの生成
Class hogeClass = [Hoge class];
[hogeClass free];
◆カテゴリ
メソッドが追加できる。
@interface クラス名 : (カテゴリ名)
@implementation クラス名(カテゴリ名)
◆プロトコル宣言
@protocol プロトコル名 <親プロトコル1 , ...>
プロトコル本体
...
@end
◆プロトコルの継承
@interface クラス名 : 親クラス名 <プロトコル1, ...>
Lispの勉強
&rest は0個以上の引数のリストを指定するときに記述する。
&optional は省略可能な引数の場合に指定する。
&body は関数の&restと同じ。macro lambda list内で使われる。
xyzzy Lispの勉強
Lispの勉強
ツール:xyzzy(Windowsのエディタ)
使い方:xyzzyを起動すると *scratch*というモードで立ち上がる。
コードを書いたら、行末でCtrl-Jして実行する。
参考:http://www.geocities.jp/m_hiroi/xyzzy_lisp/abclisp01.html
Hello Worldと出力する。
(format t "Hello, World\n")
要素を並べて括弧で括ってリストを作る。
要素はシンボルとデータに分けられる。
シンボルに数値を代入する。
リストを順番に実行することを"評価する"という。
シンボルやリストに引用符'を付けると評価を行わない。
リストの分解
first
car リストの先頭の要素を取り出す
rest
cdr リストの先頭の要素を含まない部分を取り出す
リストの合成
cons リストの先頭にデータを付け加える
list 引数のアトムからリストを作成する
append 引数のリストを結合する
16進は #x1234、8進は #o5678
分数を浮動小数点にするには float関数を使う
1+、1- はそれぞれ引数を1加減する
infc, decfはそれぞれ引数を1加減する
関数の定義
(defun 関数名 (仮引数) (処理) ・・・)
関数の内部で有効な変数はレキシカル変数(lexical variable)という。
ずっと有効な変数をスペシャル変数(special variable)という。
let を使うとレキシカル変数を定義できる。
比較にはeq, eql, equal, equalpがある。eqはアドレスで、equalpは型違いでも比較できる。
データ型を比較する述語:atom, numberp, integerp, floatp, symbolp, stringp, listp, consp
型指定子:number, integer, float, symbol, string, list, cons
型を調べる:typep述語、type-of関数
述語を組み合わせる: and, or
条件分岐:(if 条件部 then節 else節)
条件分岐:(cond (条件部A S式A1 S式A2 …) … (t S式T1 S式T2))
条件分岐:unless, when
繰り返し:(dotimes (var limit result) S式 …)
繰り返し:(dolist (var init result) S式 …)
繰り返し:(while 条件部 S式 …)
繰り返し:(loop 条件部 S式 …)、returnでloopを抜ける
繰り返し:(do (初期条件部) (終了条件部) S式 …)