(defparameter nodes '(p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10)) (defparameter lines '((p0 p1) (p0 p2 p4 p6) (p0 p3 p7 p9) (p0 p5 p8 p10) (p1 p2 p3 p5) (p1 p4 p7 p8) (p1 p6 p9 p10))) (defparameter a nil) (defparameter b nil) (defparameter n 0) (defun line2 (a b) "returns true if a iand b are on a line" (let ((r nil)) (dolist (l lines r) (cond ((and (member a l) (member b l)) (setf r t)))))) (defun line3 (a b c) "returns true if a b and c are on a line" (let ((r nil)) (dolist (l lines r) (cond ((and (member a l) (member b l) (member c l)) (setf r t)))))) (defun triangle-p (a b c) (if (and a b c (line2 a b) (line2 a c) (line2 b c) (not (line3 a b c))) (format t "~a ~a ~a ~a~%" (incf n) a b c))) (defun n3 (l) (triangle-p a b (car l))) (defun n2 (l) (setf b (car l)) (maplist #'n3 (cdr l))) (defun n1 (l) (setf a (car l)) (maplist #'n2 (cdr l))) (defun n0 (l) (setf n 0) (maplist #'n1 l) n) (time (n0 nodes))