M.Hiroi's Home Page

Memorandum

プログラミングに関する覚え書や四方山話です。
[ Home | 2020年 1月, 12月 ]

2020 年 12 月

12月31日

●大晦日

今年も残りわずかとなりました。M.Hiroi's Home Page を開設してから 20 年が過ぎましたが、ここまで長く続けることができるとは M.Hiroi も思っていませんでした。これもひとえに M.Hiroi's Home Page に来てくださる皆様のおかげです。本当にありがとうございました。来年の事を言えば鬼が笑うといいますが、これからも M.Hiroi's Home Page の更新を続けることができればいいなあ、と思っております。

それでは、来たるべき新年が皆様にとって素晴らしい年でありますように。


12月28日

●ISLisp で Lisp の初歩から

笹川さんが YouToube で ISLisp で Lisp の初歩から という動画を公開されています。その中で、拙作のページ お気楽 ISLisp プログラミング超入門 で作成したプログラムを例題として取り上げていただきました。ありがとうございます。動画による解説はわかりやすくていいですね。これからも楽しみにしていますのでがんばってください。

笹川さんが開発中の ISLisp 処理系 Easy-ISLisp は以下のページからダウンロードすることができます。

ところで、FizzBuzz 問題は 1 から 100 までの数を Fizz, Buzz, FizzBuzz に変換するのが一般的ですが、拙作の for を使ったプログラムは 0 から始めているので、最初に FizzBuzz と表示してしまいます。変数 x の初期値を 1 にしたほうがよかったですね。あとで修正しておきます。

もちろん、FizzBuzz 問題も再帰でプログラムすることができます。

リスト : FizzBuzz 問題 (ISLisp 再帰版)

(defun display (x)
  (format (standard-output) "~A " x))

(defun change-fizzbuzz (x)
  (cond ((= (mod x 15) 0) "FizzBuzz")
        ((= (mod x 3) 0) "Fizz")
        ((= (mod x 5) 0) "Buzz")
        (t (convert x <string>))))

(defun fizzbuzz (x)
  (cond ((<= x 100)
         (display (change-fizzbuzz x))
         (fizzbuzz (+ x 1)))))
Easy-ISLisp Ver1.66
> (load "fizzbuzz.lsp")
T
> (fizzbuzz 1)
1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz Fizz 22 23 Fizz Buzz 
26 Fizz 28 29 FizzBuzz 31 32 Fizz 34 Buzz Fizz 37 38 Fizz Buzz 41 Fizz 43 44 FizzBuzz 46 47 Fizz 49 Buzz 
Fizz 52 53 Fizz Buzz 56 Fizz 58 59 FizzBuzz 61 62 Fizz 64 Buzz Fizz 67 68 Fizz Buzz 71 Fizz 73 74 FizzBuzz 
76 77 Fizz 79 Buzz Fizz 82 83 Fizz Buzz 86 Fizz 88 89 FizzBuzz 91 92 Fizz 94 Buzz Fizz 97 98 Fizz Buzz NIL

s から e までの整数列を生成する関数 iota を用意すると、mapcar で FizzBuzz 問題を解くことができます。拙作のページでは iota を繰り返し (for) で作成しましたが、再帰でプログラムすると次のようになります。

> (defun iota (s e) (if (> s e) nil (cons s (iota (+ s 1) e))))
IOTA
> (iota 1 10)
(1 2 3 4 5 6 7 8 9 10)
> (mapcar #'change-fizzbuzz (iota 1 100))
("1" "2" "Fizz" "4" "Buzz" "Fizz" "7" "8" "Fizz" "Buzz" "11" "Fizz" "13" "14" "FizzBuzz"
 "16" "17" "Fizz" "19" "Buzz" "Fizz" "22" "23" "Fizz" "Buzz" "26" "Fizz" "28" "29" "FizzBuzz" 
 "31" "32" "Fizz" "34" "Buzz" "Fizz" "37" "38" "Fizz" "Buzz" "41" "Fizz" "43" "44" "FizzBuzz" 
 "46" "47" "Fizz" "49" "Buzz" "Fizz" "52" "53" "Fizz" "Buzz" "56" "Fizz" "58" "59" "FizzBuzz" 
 "61" "62" "Fizz" "64" "Buzz" "Fizz" "67" "68" "Fizz" "Buzz" "71" "Fizz" "73" "74" "FizzBuzz" 
 "76" "77" "Fizz" "79" "Buzz" "Fizz" "82" "83" "Fizz" "Buzz" "86" "Fizz" "88" "89" "FizzBuzz" 
 "91" "92" "Fizz" "94" "Buzz" "Fizz" "97" "98" "Fizz" "Buzz")

ただし、この iota は末尾再帰ではないので、大きなリストを生成するとエラーになるかもしれません。興味のある方は末尾再帰で書き直してみてください。


2020 年 1 月

1月1日

あけましておめでとうございます

旧年中は大変お世話になりました
本年も M.Hiroi's Home Page をよろしくお願い申し上げます


Copyright (C) 2020 Makoto Hiroi
All rights reserved.

[ Home ]