全12話ということでいよいよラストが見えてきましたな~リリカルLISP。終わったら更にLISPの学習ですけどね!
これ、今となったら分かるんですけど最初これ読んでる時には分かってなかったな・・関数を呼び出す関数って事だったんですね(しっかりしろ)
で、例の実行環境「Racket」を使って手打ちするようにしたんですけど・・何ぃ!?後ろカッコ「)」の位置に合わせて対応してる部分が灰色に変化する!これは便利すぎる!
ふんふん・・まあ、これは分かるか・・けどCDRが前に来てるんですね・・
ちなみにCARをCDRに変えたらどうなるんだ?という実験。エラーか~・・lのリストは破壊されてないんだから別にXに足されても良いような気がするけどなぁ?
うわ・・なんだコレは・・と思ったけど、今から考えたら「+」や「*」もシンボル?で使えるのか~・・そして関数として使うとこれをちゃんと理解してたらなぁ・・
ああ、Mapってそういう意味だったのか!それでPythonのリスト操作の時に良く見かけたんだな・・
ふんふん、まあ読んでる時には分かってる気になってるんだけどね。これから何度も書かないと使えるようにはならんやろな
そして練習問題・・今となっては分かりそうなんだけども・・そもそも問題の意味がよく分からなくてお手上げ、ついにネットで「リリカルLISP 11話 解答」とかって検索してしまった・・そして11話で詰まってる人が作者からアドバイスをもらってる書き込みを発見、ああ・・カンニングしてしまいました。そもそも問題の意味を全然理解できてなかったのでどうしようもなかった・・言い訳ですけど、Paizaの問題みたいに「こういう引数を入れたらこういう結果が出る関数」とか実際の出力例が示されていれば・・。まあ、明日は時間があるのでもう一度11話をやり直してから最終話に突入しよう!
ところで、実行環境が整ったら検証しないと・・と思ってた例のAppendを実現する関数。(f (cdr x) y)))) の部分が腑に落ちないので実験的にyをxに変えてみた結果。ふうむ・・?リストxがnullになったらyを表示するはずなのになんでこんな結果に・・?リストxが表示されてるじゃないか・・(こういう順番になるのは分かる)
じゃあnullの結果をyじゃなくて空リストにしたら・・・?これもリストxを表示するのか・・
じゃあconsの引数からyを消したら・・・?エラーか・・
じゃあ(cons (car x)のcarをcdrに変えたらどうなるんだ?おおこれは・・なるほどCDRで取れるのはリストなのでリストの形で追加されてる・・のか?
とりあえず、今の所僕の理解では
(cons (a (cons (b ( cons (c (cons (() ~ )y って感じで式が作られるから頭から追加できるということなのか・・な?
このまま丸覚えでやってしまっても良いんだけど、結果繋がった結果はリストyとして格納されてif nullの条件でyが表示されると思ってたのだが・・null yの代わりに()を入れたらリストxが表示されて、consの最後のyをxに変えたらxに入ってるのは分かるけどnull yなのにxの変化後のリストが表示されるってどういうことなんだ・・これは調査する必要がある!
という訳で続きます(-_-;)