トップ «前の日記(2013-04-03(Wed)) 最新 次の日記(2013-04-05(Fri))» 編集

屑俺日記

僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。


2013-04-04(Thu) なんか天候不安定らしい。

循環リストでfizzbuzz

できたのは昨日(数分前)だったが、submitした途端 滅茶滅茶になったので、一日ずらして書き直す。

以前、 配列を使ったことがあったが、循環リストなら折り返す 処理が要らなくなると踏んで試す。
循環リストの作り方が間違っていたことと、 改行の処理に迷ったところが嵌りどころだった。

#!/usr/bin/env clisp
(defparameter *print-circle* t)
 
(setf fzlist
      '("fizzbuzz" 1 1 "fizz" 1
        "buzz" "fizz" 1 1 "fizz"
        "buzz" 1 "fizz" 1 1 1))
(setf (cdr (cdr (cdr (cdr (cdr
      (cdr (cdr (cdr (cdr (cdr
      (cdr (cdr (cdr (cdr (cdr fzlist)
            )))))))))))))) fzlist)
 
(defun myfb (mylist num)
 (cond
  ((< num 0) nil)
  ((zerop num) (car mylist))
  (t (myfb (cdr mylist) (- num 1)))))
 
(defun fb (newlist first last)
  (cond
    ((> first last) nil)
    ((eq (myfb fzlist first) 1)
     (princ first)
     (princ '#\newline)
     (fb newlist (+ 1 first) last))
    (t 
     (princ (myfb fzlist first))
       (princ '#\newline)
       (fb newlist (+ 1 first) last))))
 
(fb fzlist 1 100)

リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。

index.htmlは ここから。