Land of Lisp を読んでいるのでメモ.
本ブログは自己啓発の意味合いもあるため,定期的に何かしらはブログにアップすることを目標にする.
そのうち綺麗にまとめます.
関数型プログラミング
- 関数は,引数か関数内で宣言された変数しか参照せず,また値を返す以外の動作をしない.
比較についてのルール
- シンボル同士はEQで比較する
- それ以外はEQUALで比較する
Common Lispでは,空リスト( '(),(),'nil,nil )が唯一の偽値
リストはコンスセルがつながってできている
コンスセルは
cons
コマンドで作られるcar
とcdr
でリストの中身を調べることができるLispにはコードモードとデータモードがある
- デフォルトではコードモード
- REPLへの入力はフォームの形式でなくてはならない
(command bla bla bla bla ...)
'
(シングルクオート)を式に付加すると,データモードで扱われる(クオートする)- 準クオート
- `(バッククオート)を付加した式の中で
,
(コンマ)を使用すると,一部分だけコードモードに戻すことができる(アンクオートする)
- `(バッククオート)を付加した式の中で
関数
assoc
:キーをもとに要素を抜き出すmapcar
:関数とリストを引数とする.リストの要素1つ1つに対し,関数を実行するappend
:リストをつなげて1つのリストにするapply
:関数とリストを引数とする.リストの各要素を引数として関数を呼び出したかのように動作するremove-if-not
:関数とリストを受け取る.リストの各要素に関数を適用し,真でなかったものを除いたリストを返す
高階関数:他の関数を引数として受け取る関数
#'
:functionオペレータの略記.関数を値として扱う場合にそれを明示する必要がある(Common Lispでは)
典型的なLispコードスタイル
(apply #'append (mapcar #'describe-path (cdr (assoc location edges))))
- 複雑なデータの塊を幾つかのステップで受け渡しながら処理を進める
- 高階関数も頻繁に使われる
関数末尾のp
- nilか真を返す場合,Common Lisp では関数名の最後にpをつける
- 真偽値を確かめる関数は述語(predicate)と呼ばれるため
雑記
一週間ほど海外なので,更新はないです.
自作OSは飛行機の中やホテルでの夜にも進める予定だけど,リモートにpushするのは帰国してからかも.