; 左から3つずつ数字を取ってきて門松列になっているか判定する (defun main () (let* ((n (read)) ; loop repeat で指定回数繰り返し collect で読み込んだ値のリストを作成できる (xs (loop repeat n collect (read))) ; loop マクロ中で on xs を使うと xs の cdr を見ながらループできる ; loop for (a b c) on '(1 2 3 4 5 6 7) とすると ; (1 2 3) (2 3 4) (3 4 5) ... のようにループする (ans (loop for (a b c) on xs ; c が nil になるまで続ける while c ; count 以下の式を満たす個数を求める count (and (/= a b c) (or (= b (min a b c)) (= b (max a b c))))))) (princ ans) (terpri))) (main)