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))
まあ、ここまではうまくいった。