トップ «前の日記(2013-04-18(Thu)) 最新 次の日記(2013-04-22(Mon))» 編集

屑俺日記

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


2013-04-21(Sun) 徐々に晴れてきた

fizzbuzz 書き直し

循環リストを使ったfizzbuzz。
まだまだ足りない(関数は一つで十分)が、 より幾分ましになった。はず。

#!/usr/bin/env clisp
(defparameter *print-circle* t)
 
(setf fzlist
      '#1=(nil nil "fizz" nil "buzz"
               "fizz" nil nil "fizz" "buzz"
               nil "fizz" nil nil "fizzbuzz"  . #1#))
 
(defun myfizzbuzz (mylist first last)
  (cond
    ((null (car mylist)) (princ first))
    (t (princ (car mylist))))
  (princ '#\newline))
 
(defun myfz (mylist first last)
  (cond
    ((null mylist) nil)
    ((> first last) nil)
    (t
     (myfizzbuzz mylist first last)
     (myfz (cdr mylist) (+ first 1) last))))
 
(myfz fzlist 1 100)

右に追記、左に追記

range()っぽいのを。

(defun add_left (first last)
  (cond
   ((eq first (+ last 1)) nil)
   (t (cons first
            (add_left (+ 1 first) last)))))
 
(add_left 1 10)
(1 2 3 4 5 6 7 8 9 10)
 
(defun add_right (first last)
  (cond
   ((eq first (+ last 1)) nil)
   (t (cons last
            (add_right first (- last 1))))))
 
(add_right 1 10)
(10 9 8 7 6 5 4 3 2 1)
 

また書き直し

だいぶましになった(つもり)。

#!/usr/bin/env clisp
(defparameter *print-circle* t)
 
(setf fzlist
      '#1=(nil nil "fizz" nil "buzz"
               "fizz" nil nil "fizz" "buzz"
               nil "fizz" nil nil "fizzbuzz"  . #1#))
 
(defun myfizzbuzz (mylist first last)
  (cond
    ((null (car mylist)) (princ first))
    (t (princ (car mylist))))
  (cond
    ((eq first last) nil)
    (t (princ '#\newline)
       (myfizzbuzz (cdr mylist) (+ first 1) last))))
 
(myfizzbuzz fzlist 1 100)

ついでにgauche でも

ほぼ同じfizzbuzz。

#!/usr/bin/env gosh
 
(define fzlist
  '#0=(#f #f "fizz" #f "buzz"
          "fizz" #f #f "fizz" "buzz"
          #f "fizz" #f #f "fizzbuzz" . #0#))
 
(define myfizzbuzz
  (lambda (mylist first last)
    (cond
     ((not
       (car mylist)) (print first))
     (#t
      (print (car mylist))))
    (cond
     ((eq? first last) #t)
     (#t
      (myfizzbuzz (cdr mylist) (+ first 1) last)))))
 
(myfizzbuzz fzlist 1 100)

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

index.htmlは ここから。