ANSI Common Lisp

分かりそうな所読み終わって、実際書いてみた。
去年からやっている、ダブルクロスの平均値のアレ。
またリスとの平均値とかやってもしょうがないので、二つのダイスを振ったときの取り得る値のリストを返してみる。

(defun list-append (lst x)
  (mapcar (lambda (l)
			(append l (list x)))
		  lst))

(defun listlist (lst)
  (mapcar 'list lst))

(defun dice-combo (dice1 dice2)
  (if (null dice2)
	  nil
	(append (list-append (listlist dice1) (car dice2))
			(dice-combo dice1 (cdr dice2)))))
(dice-combo
 '(1 2 3 4 5 6 7 8 9 10)
 '(1 2 3 4 5 6 7 8 9 10))

;↓は最後のヤツの実行結果
;>
;((1 1) (2 1) (3 1) (4 1) (5 1) (6 1) (7 1) (8 1) (9 1) (10 1) (1 2)
; (2 2) (3 2) (4 2) (5 2) (6 2) (7 2) (8 2) (9 2) (10 2) (1 3) (2 3)
; (3 3) (4 3) (5 3) (6 3) (7 3) (8 3) (9 3) (10 3) (1 4) (2 4) (3 4)
; (4 4) (5 4) (6 4) (7 4) (8 4) (9 4) (10 4) (1 5) (2 5) (3 5) (4 5)
; (5 5) (6 5) (7 5) (8 5) (9 5) (10 5) (1 6) (2 6) (3 6) (4 6) (5 6)
; (6 6) (7 6) (8 6) (9 6) (10 6) (1 7) (2 7) (3 7) (4 7) (5 7) (6 7)
; (7 7) (8 7) (9 7) (10 7) (1 8) (2 8) (3 8) (4 8) (5 8) (6 8) (7 8)
; (8 8) (9 8) (10 8) (1 9) (2 9) (3 9) (4 9) (5 9) (6 9) (7 9) (8 9)
; (9 9) (10 9) (1 10) (2 10) (3 10) (4 10) (5 10) (6 10) (7 10) (8 10)
; (9 10) (10 10))

まあ、ここまではうまくいった。