Skinerrian's blog

論理学・哲学・科学史・社会学などに興味があるので、その方面のことを書きます。更新は不定期。

リリカルLISP

最近プログラミングの勉強を始めてみた。どの言語を学ぶか迷ったけど、初心者らしく(?)Pythonを選択。Pandasの扱いに四苦八苦してますが、私は元気です。

プログラミングといえば、随分まえに「リリカルLISP」というフリーゲームをやったことがある。LISPの知識を前提せずに作られているゲームだが、おそらくかなり初歩的なところで終わっているので、クリアしても実用的な知識は身に付かない。それでも練習問題は初心者にはハードで、昔やったときは結構苦労した記憶がある*1

とはいえ、さっきこのゲームのことを思い出してちょっと遊んでみたところ、さほど苦労せずにクリアできたので以前よりプログラミングに慣れたのかもしれない*2。感想としては、とりあえず「末尾再帰、最高!」といったところ。

検索したところweb上には解答例がないようなので、記念にでも記しておこうかと思う。序盤の問題はあまりにも簡単なので、第6回あたりから。

  • 第6回 (define s (lambda (n) (if (= n 0) 0 (+ n (s (- n 1))))))
  • 第7回 (define len (lambda (x) (if (null? x) 0 (+ 1 (len (cdr x))))))
  • 第8回 (define f (lambda (x) (lambda (n) (+ x n))))
  • 第9回  (define (si n x) (if (= n 0) x (si (- n 1) (+ n x))))
  • 第11回 (define (map1 f l) (if (null? l) '() (cons (f (car l)) (map1 f (cdr l)))))
  • 第12回 (define (muli x y z) (if (null? y) z (muli x (dec y) (add x z))))

あと、昔プレイしたときはミニゲームをまったく真面目にやらなかったけど、今回はラスボス(なのは)もちゃんと倒した。フェレットのユーノをモグラ叩きの要領で100回以上クリックすると、戦闘時に「たたかう」から「鮫島の怒り」を選ぶことができる。なのはを倒すより難しいのは、バッティングのミニゲーム(リインが投げるボールをヴィータが打つ)で、タイミングが分かりづらい…。「ホームランダービー」と違って安打でも許されるのが救いか。

*1:というか、昔はこのゲームの元ネタの「リリカルなのは」すら見てなかった

*2:このゲームの一番の難しさはインタプリタが一行しかないところだったりする。