L99 P21 から P25 のオレオレ解答
どもです。
L99 ですが,バックトラック法を,もひとつ,いやさ,全然わかってないので,
P59 で立ち止まって,少し戻って武器を獲得すべくよりみち勉強。
The Land of Lisp についても,しんどくなったので,少し戻って,Lisp の基礎を勉強中。
これがほんとうのバックトラック,ってかっ!?
いいんですよ。今日はとても暑いので,このくらいさぶいほうが。
てかよー,腰が痛くて椅子に座ってられないくらい。
何が原因かなぁ。肥満が原因なのはそうなんだけど,それだけじゃない気がする。
とりあえずは,湿布貼って,健康バンドをまいて,クッションを背中に挟んで
姿勢良くして座ればなんとかなるが,しんどい。非常にしんどい。
基本,めちゃくちゃ姿勢が悪いので,悪いのは姿勢だけではござんせんが,
姿勢を正していこうと思う。
P21 から P25
;;;; P21 (defun insert-at (newelt lst pos) (labels ((insert-at-aux (l i) (if (= i pos) (cons newelt (nthcdr (1- pos) lst)) (cons (car l) (insert-at-aux (cdr l) (1+ i)))))) (insert-at-aux lst 1))) (insert-at 'alfa '(a b c d) 2) => (A ALFA B C D) (insert-at 'new '(a b c) 1) => (NEW A B C) (insert-at 'new '(a b c) 3) => (A B NEW C) (insert-at 'new '() 1) => (NEW) ;;;; P22 (defun range (i j) (labels ((range-inc (b e) (if (> b e) nil (cons b (range-inc (1+ b) e)))) (range-dec (b e) (if (< b e) nil (cons b (range-dec (1- b) e))))) (if (<= i j) (range-inc i j) (range-dec i j)))) (range 4 9) => (4 5 6 7 8 9) (range 1 1) => (1) (range 9 4) => (9 8 7 6 5 4) ;;;; P23 (defun rnd-select (lst n) (let ((i (and lst (random (length lst))))) (if (zerop n) nil (cons (nth i lst) (rnd-select (remove-at lst (1+ i)) (1- n)))))) (rnd-select '(a b c d e f g h) 3) => (G D H) (rnd-select '(a) 1) => (A) ;;;; P24 (defun lotto-select (n m) (rnd-select (range 1 m) n)) (lotto-select 6 49) => (20 2 46 38 49 43) (lotto-select 1 1) => (1) (lotto-select 1 5) => (4) ;;;; P25 (defun rnd-permu (lst) (rnd-select lst (length lst))) (loop for i below 5 collect (rnd-permu '(a b c d e f))) => ((F E B C A D) (C E B D A F) (C A E D B F) (D E F A C B) (D A F C E B))