(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