PAIP

演習1.5

二つの数列の内積を計算する関数の作成。これは簡単。 ;;; Exercise 1.5 (defun dot-product (x y) (apply #'+ (mapcar #'* x y))) (dot-product '(10 20) '(3 4)) ;==> 110 模範解答には3つの方法(再帰、ループ、mapcar/apply)が載っていて、同じことをや…

演習1.4

リスト中に特定のアトムが含まれる数を数える関数を作る。 (defun count-anywhere (x lst) (cond ((null lst) 0) ((listp (first lst)) (+ (count-anywhere x (first lst)) (count-anywhere x (rest lst)))) (t (+ (if (eq x (first lst)) 1 0) (count-anywh…

演習1.3

リスト中に含まれるアトムの数を返す関数count-atomsを作る。 ;;; Exercise 1.3 (defun count-atoms (lst) (cond ((null lst) 0) ((listp (first lst)) (+ (count-atoms (first lst)) (count-atoms (rest lst)))) (t (+ 1 (count-atoms (rest lst)))))) と作…

演習1.2

累乗の計算をするプログラムを書くという課題。簡単簡単。 ;;; Exercise 1.2 (defun power (n p) (if (= p 0) 1 (* n (power n (- p 1))))) 演習問題の解答を見たら、pが偶数の時には(expr (power n (/ p 2)) 2)とすることでO(N)→O(log(N))への高速化を図っ…

演習1.1

名前の末尾に「Jr.」や「MD」というサフィックスが付いているときに、それを無視してラストネームを抽出するプログラムを書け、というもの。 ;;; Exercise 1.1 (defparameter *suffixes* '(MD Jr Sr II III) "A list of suffixes that can appear at the end…

1.10章「Lispは何が違うのか」

人工知能のような複雑なプログラムを作るためにLispを使う理由として少なくとも以下の8つがある、らしい。 組み込みのリスト処理機能 (built-in support for lists) 自動的な記憶域管理 (automatic storage management) 動的な型付け (dynamic typing) 第一…

1.7章「高階関数」

これまで関数に関数を渡す必要のあるプログラムはあまり書いたことがないので、高階関数はいつも混乱。使いどころを間違えなければシンプルで便利そうなんだけど。あと、どうもmapcar/apply/funcall/reduceがまぎらわしい。 (mapcar #'- '(2 3)) ;=> (-2 -3)…

目次と正誤表

この手の本を買ってまず最初にすることは目次の確認。あと正誤表や配布コードの入手。どちらも出版社のサイトにhttp://www.seshop.com/product/detail/12043/にある。まず、目次は以下のとおり。

PAIP買った

ポイントが溜まっていたのでアキバのヨドバシカメラで『実用 Common Lisp』を購入。Common Lisp界の名著と名高い『Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp』の日本語版。ちょこちょこと勉強していこうと思う。