定食屋おろポン

おろしポン酢と青ネギはかけ放題です

Common Lisp初め

「おろポンくん、プログラミングできるの?」
僕「うーんどうだろう、少しは書けますね」
「じゃあWindowsのプログラムとか作れちゃう?」
僕「いや、Windowsはちょっと」
「分かったJavaだ」
僕「Javaは全く。。」
「なんだ、Web系?PHPとか?」
僕「PHPは前にちょっと触ったことがあるくらいですね。」
「え、ほかは?」
僕「うーん、Ruby on Railsは少し触りましたけど全然。。」
「そしたらHTMLとかCSSとかJavaScriptとか?」
僕「HTMLとCSSはなんとなく。JavaScriptもなんとなくは。」
「なんとなく?へえ。。ああ、スマートフォンアプリとかバリバリ開発しちゃう系?」
僕「iPhoneアプリなら行けるんですが、Androidアプリ書いたことないんですよね」
「え、今どき両方対応してもらわないと。。」
僕「あ。。はい。。」
「えっとじゃあ何出来るの?」
僕「あ。。あ。。」
「おろポンくん、ほんとにプログラミングできるの?」
僕「ゆ。。ゆるして。。」

今日、ぼんやりしながら、こんな脳内会話を繰り広げていました。 ルビイストです!とかJSerです!とかスマホアプリ開発行けます!とか言いたい。言いたい。

...ゆるして!

というわけで、なんとなくCommon Lispに興味がわいたので文法を調べてみました。

carcdrHaskell(x:xs)的な感じですね。なるほどなるほど。

そしたらmapとfilterはすぐ書けますね、と書いてみた。functionfuncallでハマったけど。

感想:「カッコがキモいのは慣れのような気がする」「Lispに慣れてLisp脳になれたら楽しそう」

(defun myfilter (l f)
  (cond
    ((null l)
      nil)
    ((funcall f (car l))
      (cons (car l) (filter f (cdr l))))
    (t
      (filter f (cdr l)))))

(myfilter '(Apple Orange Banana) (function (lambda (x) (eq x 'Apple))))

(defun mymap (l f)
  (cond
    ((null l)
      nil)
    (t
      (cons (funcall f (car l)) (mymap (cdr l) f)))))

(mymap '(1 2 3 4 5) (function (lambda (x) (* x x))))