あらゆる言葉が載った辞書
あらゆる言葉が載った辞書を考えます。
一番最初に載っている言葉は何でしょうか?
正解は「あ」です。
次は「ああ」ですね。その次が「あああ」。
何ページかめくると、「あああああ・・・」となってますね。
それを超えると、今度は「あい」になります。
次が「あいあ」。その次が「あいああ」。
以下、「あいあああああ・・・」となってますね。
さらに超えると、次は「い」になります。
以下、「いあ」、「いああ」、「いあああ・・・」、「いあい」、「いあいあ」、「いあいああ」、「いあいあああ・・・」となります。
では、辞書を分けて、「あ」から始まる辞書を「あ巻」とし、最初の「あ」を省略します。
一番最初に載っている言葉は何でしょうか?
元の辞書の「あ」は消えるので、次の「ああ」の「あ」を省略して、「あ」になります。
次は、「あああ」を省略して、「ああ」になります。
以下、「あああ」、「ああああ」、「あああああ・・・」になります。
それを超えたら、次の「あい」を省略して、「い」になります。
以下、「いあ」、「いああ」、「いあああ・・・」となります。
つまり、「あ巻」は、「あ」、「ああ」、「あああ・・・」、「い」、「いあ」、「いああ」、「いあああ・・・」となっています。
ということは、元の辞書とあ巻は同じものになります。
辞書を分けたはずなのに、同じになるのは不思議ですね。
AIZU ONLINE JUDGEのELISP解答例(ITP1_1_A~ITP1_2_C)
ITP1_1_A:Hello World
(message "Hello World")
ITP1_1_B:X Cubic
(progn (defun cubic () (let ((x (read))) (* x x x))) (cubic))
ITP1_1_C:Rectangle
(progn (defun rectangle () (let ((a (read)) (b (read))) (cons (* a b) (* 2 (+ a b))))) (rectangle))
ITP1_1_D:Watch
(progn (defun watch () (let ((x (read))) (let ((s (% x 60))) (let ((m (% (/ (- x s) 60) 60))) (let ((h (/ (- (/ (- x s) 60) m) 60))) (list h m s)))))) (watch))
ITP1_2_A:Small, Large, or Equal
(progn (defun small () (let ((a (read)) (b (read))) (if (< a b) (message "a<b") (if (> a b) (message "a>b") (message "a=b"))))) (small))
ITP1_2_B:Range
(progn (defun range () (let ((a (read)) (b (read)) (c (read))) (if (and (< a b) (< b c)) (message "YES") (message "NO")))) (range))
ITP1_2_C:Sorting Three Numbers
(progn (defun swap (x a b) (let ((c (elt x a))) (setf (elt x a) (elt x b)) (setf (elt x b) c) x)) (defun sort () (let ((a (read)) (b (read)) (c (read))) (let ((x (list a b c))) (dotimes (j (1- (length x))) (dotimes (i (1- (length x))) (if (> (elt x i) (elt x (1+ i))) (swap x i (1+ i))))) x))) (sort))
Lispやってみた2
あれから少し経って、多少なりとも使えるようになりましたが、わからないことだらけです(^_^;)
例えば、文字列を出力しようとしても、カッコつきのまま出力されたり、複数の出力ができなかったり・・・
あとわかったことは、lispにもいろいろな方言があるということでしょうか。
私が使っているのは、Emacs Lisp(通称elisp)だと思います。
とりあえずは、少しでも良さげな解説サイトを探すことを
目標にしたいと思います(´-`)