暇つぶしのメモ書

トーシロのコンピューティング

Subscribe to RSS feed

Scheme 始めたばっかりの思いつきメモ その2

>(cons 3 (cons 1 2))
#<procedure:cons>
> 3
> (1 . 2)
> stdin::438: read: unexpected `)'

=== context ===
c:\Program Files\PLT\collects\scheme\private\misc.ss:74:7

これと

> (cons 3 (cons 1 2))
(3 1 . 2)

のそれぞれの一行目って何が違うんだ?
どうして違う結果が出るんだ?

おかしいじゃないかよぉ。

Scheme 思いつきメモ 1 コンスセル

もうひとつの Scheme 入門
http://www.shido.info/lisp/idx_scm.html

これを読みながらSchemeの独習。
この入門の想定読者は

* 情報系学科に入学したは良いが、いきなり Scheme を習わされて講義についていけない学生さん。
* Basic に飽き足らない人。ただし、Basic の知識は Scheme を習うときかえって障害になります。
* 普段は C 系言語 (C, C++, Java) を使っているが、他の言語にも手を広げたい人。
* 趣味でプログラミングを始め、まず、Scheme をマスターしようと決めた人。(こういう人もたまにはいるでしょう。)

ってことらしいけど、俺は最後。
たまにはいるんだよね。ゲームに飽きてプログラミングに興味を示す年寄りも(^^;;

まだ始めて数十分。
とにかく思いつくことを書いておく。

じつはいきなりつまずいた。逃げるためにこんなものを書き始めた(^^;;

練習問題に「処理系が次のように表示するデータ構造を cons で作ってください」ってあって、
問題が「("hi" . "everybody")」

さっそく

(cons "hi" ・ "everybody")

ってやった。
間違っているらしい。
じつは「中黒」の半角での入力方法がわからない。
仕方ないから全角で「・」と入力して半角に変換した。
これがいけなかったのかなって最初思った。
確認のために

(cons 1 2 3 4)

ってやってみた。
やっぱりどうも間違っているみたいだ。

cons: expects 2 arguments, given 3: "hi" "everybody" ()

=== context ===
c:\Program Files\PLT\collects\scheme\private\misc.ss:74:7

って出る。
アルファベットが出てくるだけで途方にくれる俺としては困る(^^;;
とにかく「misc.ss」の74行を読んでみた。

わからん・・・
ランバダ? 
昔流行ったなぁ。テレビでなんか色っぽく踊るシーンを見たことを思い出す・・・

しょうがないから次に進む。
次の問題が「(0)」
当然のように

(cons 0)。

これも間違い。
なんでだろう?
コンスセルってアドレスにメモリーを収める関数だろ?(こう言ういい方で良いのかどうかわからないけど)
なんで収めることができないんだ。

で、チートした。エヘヘ

問題 ("hi" . "everybody")
解答 (cons "hi" "everybody")

問題 (0)
解答 (cons 0 '())

解答見てあれっ?って思ってコンスセルのところを読み直した。
あはは、俺って何も読んでないか理解していない。

でもさぁ、情報をたった二つ、それもつねに二つ、だけ格納する関数に何の意味があるんだ?
入れ子や数珠繋ぎにできるのはいいけどいちいちめんどくさいだろうが。
lisp憶えるとプログラムの筋がよくなるそうだけど、たった二つのアドレス使って
いくつも入れ子や数珠繋ぎにすることを「筋がいい」っていうならあまりに世間の感覚から離れてないだろうか?
C言語で変数を宣言するときは必要な数を指定することができる(と俺は思っているけどC言語挫折したし)
たとえば3つの数字を利用したいときに3つの数字を収められるのと一つの数字と後二つの数字を数珠繋ぎして三つじゃ
どっちがめんどくさいのかは明らかだって思う。

この辺は後で明確な答えが出て来るんだろうけど、
現時点での疑問として書いておく。
Cの時も最初の疑問って後でわかったりしたし。
February 2012
S M T W T F S
January 2012March 2012
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29