next up previous
Next: 1.2 リスト行列の足し算,引き算 Up: 1 リスト行列 Previous: 1 リスト行列

1.1 ベクトル

リストをそのままベクトルと扱ってみると, ベクトルの足し算,引き算は,
(defun float-vector (&rest l) (mapcar #'float l))

(defun v+ (a b) (mapcar* #'+ a b))
(defun v- (a b) (mapcar* #'- a b))
という具合に書くことができる. float-vector定義の 引数宣言(&rest l)は,任意個の引数をまとめてリストにしてlに入れる というものである.
> (v+ '(1 2 3) '(1 2 3))
(2 4 6)
> (v- '(1 2 3) '(1 2 3))
(0 0 0)

> (v- (float-vector 1 2 3) (float-vector 2 3 4))
(-1.0 -1.0 -1.0)
ベクトルの大きさnormや,ベクトル 間のユークリッド距離distanceを求めるには,
(defun norm (v)
  (mapcar #'(lambda (x) (* x x)) v))

(defun distance (a b)
  (norm (v- a b)))
となり,
> (norm '(1 2 3))
1.909385060972404

> (distance '(0. 0. 0.) '(1. 1 1))
1.5537739740300374


generated through LaTeX2HTML. M.Inaba 平成18年5月7日