9LISP 005は、2009/11/28(土)です。

ポンピングブレーキって知ってますか?ブレーキを踏み込んで、タイヤがロックする前にブレーキを緩めるテクニックです。ア・イ・シ・テ・ルのサインですね。逆に、急ブレーキでタイヤをロックすると、ロック・ユーのサインです。スペルが違うけどね!


今週の土曜日は、9LISP 005が開催されます。2009/11/28(土)です。こちらから参加表明ができます。前回も言いましたが、参加表明って、諸葛孔明っぽいですよね。


今回も「The Little Schemer」をベースに進めていきます。実は、私は前回欠席したので、前回どんな様子だったのか把握していません。非常に盛り上がったという伝説が残っています。はたして、今回はどうなることか。それは、あなたしだい。まずは、参加表明です。


The Little Schemer (The MIT Press)

The Little Schemer (The MIT Press)

9LISPのブログが復活します。

12日ぶりの更新です。id:shunsukはいったい何をしていたのか。実は、子供たちが入院して、いっしょに付き添い入院していました。更新が面倒くさくなったわけではありません。ありませんからっ!


明日から、通常通りの更新となります。まだSchemeのお勉強が残っているので、そのへんのネタを書いていこうと思います。その他、何かネタがある人は、よこしなさい。

Google発のプログラミング言語「Go」

Googleが新しいプログラミング言語「Go」を出しました。


左上のキャラクターは何者なんでしょうかね。私は、彼のことを「Hiromi」と読んでいます。


Cの後継者にして、LLのノリをミックスしてるみたいです。詳しくは、ググってくださいカス。まあ、LISPには何の関係もないのですが。でも、誰かGoでSchemeを実装するかもしれませんね。並列処理に強いSchemeとか。


さて、9LISPのブログになぜGoの話題を出したかというと、キャラクター名がHiromiだと言いたかっただけです。あと、ブログ書く時間などありませんから。


ちなみに、私は今週末の9LISP 004に参加できないかもしれません。そこで、イベントレポートを他の人にお願いする予定です。さて、誰が書いてくれるのでしょうか。Go期待ください!

9LISP 004は、2009/11/14(土)です。

スミマセン。ずいぶんと更新をお休みしてしまいました。妻が手術をしまして、その直後に私が風邪をひいて、さらに気管支をやられてしまいました。この気管支炎は病院に行っても治らないので、「JavaScriptSchemeを実装したら咳が治まった」などの民間療法があれば教えてください。


今週の土曜日は、9LISP 004が開催されます。2009/11/14(土)です。こちらから参加表明ができます。参加表明って、諸葛孔明っぽいですよね。


さあ、9LISP 004の内容です。今回は必須課題はありません。また、今回より「The Little Schemer」をベースに進めていきますので、はじめての人も気軽に参加できますね。「The Little Schemer」を持っていなくても大丈夫なので、はじめての人も気軽に参加できますね。参加費は無料ですので、はじめての人も気軽に参加できますね。


勉強会が終わった後は、希望者でランチ(つまり昼食のことですが)をします。言語マニアもいるので、Scheme以外のプログラミングの話をしたい人もどうぞ。プログラミングの話題でなくても、仕事の話、趣味の話、なんでもどうぞ。何の話をすればいいか分からない人は、id:shunsukに「Magic Mouse使いやすいですか?」と聞いてください。もれなく、微妙な返答をします。


The Little Schemer (The MIT Press)

The Little Schemer (The MIT Press)

2日間、ブログの更新をお休みします。

id:shunsukの私用のため、今日と明日の2日間、ブログの更新をお休みします。1日100万アクセスをいただいている当ブログですが、私用だからしょうがないです。私用だけに、しようがない。しようがないので、id:shunsukの渾身のネタをご覧ください。


しようもないですね。みなさんは、SchemeのしようしょR5RSを読みましようね。しようねんよ大志を抱け。むしろ、神話になれ。

9LISP 003の報告です。

勉強会の当日にブログを更新すると宣言しながら、更新しなかったid:shunsuk。です、ダメ人間です。ひとつ言い訳すると、勉強会の後、ブログを更新する気が起きなくて。それで更新しませんでした。だから、私は悪くないです。ダメ人間ではありません。むしろ、人格者です。


それでは、9LISP 003の報告です。課題のチェックと、質問コーナー。関数は、MIT記法とlambda記法のどっちがいいのか?は、決着がつかず。このブログでは、SICPに合わせてMIT記法でいいですか?ちなみに、Emacsにquack.elを入れると、lambdaと入力するとλに変換されてカッチョエエです。Vimでもできないのかということでしたが、λをlambdaと解釈する処理系つくればOKと適当に答えておきました。そう、適当なのです。


また、再帰の書き方はどれがいいのか?先日、再帰の書き方についての記事を書きました。

いろいろありますね。その後に気づいたのですが、SICPではdefineを入れ子にする書き方をしています。結局、これも結論は出ず。このブログではどの書き方で統一しましょうか?


次の質問です。大域変数の一覧は見れるのか?C#Scheme処理系を実装しているid:aharisuくんによると、実装依存だそうです。前回から、「実装依存」という回答が多いですね。それだけ、いろんな人が実装してるんでしょうね。


可変長引数は、なんであんな風に(下記参照)書くのか?

(define (func a b . c)
    (print c)))


回答はid:aharisuくん。定義です。そういうものらしいですよ。ここで、Schemeにも構文(シンタックス)があるという事実が暴露されました。例えば、defineは先頭にしか書けないとか。そこで、Schemeの仕様書R5RS(日本語訳あり)を読もうという話になりました。

次回か、その次までに読みましょう。できれば、Schemeを実装してみましょう。ハードル高い。。。


続いて、チャレンジ問題の答えあわせ。それについては、1問ずつこのブログで解説していこうかと思っています。FizzBuzzだけでもいろんな書き方があるので、みんなのコードを見れるといいね。ということで、私はcodepadがいいかなと思っています。


そして、id:aharisuくんが衝撃の暴露話。割り算の余りを求めるremainderとmoduleは動作が違うんだそうです。負数で割ると、違いが現れます。

(remainder 10 -3) ; 1 他言語(CやC#)の%
(modulo 10 -3) ; -2 第2引数の符号と一致する


へー。他のプログラム言語では、mod関数が多そうなので、moduloを使っていました。でも、他言語と同じ動作をするのは、remainderなんですね。


リストを作ってくれる便利関数があります。

(iota n 1)


これは、組み込み関数ではありません。srfi-1というライブラリを呼び出すと使えるようになります。srfiは1からはじまる番号で管理されてるので、ビミョーというお話。


id:aharisuくんが、またまた暴露話。条件分岐のcondには、レシピエント形式というのがあります。

(cond (2 => /)) ;=> 1/2
(cond (#f => /) (#f => +) (10 => display)) ;=> 10


解りますか?上の式では、2がtrueなので(Schemeでは#f以外はtrue)、(/ 2)が評価されます。下の式では、10がtrueなので、(display 10)が評価されます。id:aharisuくん曰く、使い道が分からないとのこと。


で、結局、R5RS読もうということに。


というカンジです。ガシガシ、コード書こうぜ!と言いつつ、おしゃべりだけで終ってしまいました。まあ、濃い話なのでいいかと。そして、課題の出し方ですが、何かに沿って進めていってはどうか。ということで、「The Little Schemer」を使うことになりました。


The Little Schemer (The MIT Press)

The Little Schemer (The MIT Press)


持ってない人は買いましょう。valvallowさんによると、英語だけど読みやすい。むしろ、英語が読めるようになったそうです。初参加で持ってない人は、その時だけ何とかします。


報告は以上です。参加者のみなさん。補足はコメント欄で。私は他力本願です。そう、他力本願なのです。ダメ人間です。ひとつ言い訳すると、やる気がないんです。だから、私は悪くないです。ダメ人間ではありません。むしろ、人格者です。

9LISP 003までの課題です。

明日、2009/10/17(土)は、9LISP 003です。参加表明はOKですか?前回同様、課題が出ています。私はまったくやってなくて、急いでやってます。ブログを書いているヒマなどありません。ブログを書いているヒマなどないのです。


必須。


任意。


さあ、今回からはチャレンジ問題が出題されています!

(((lambda (x)(lambda (x)(+ x 1))) 2) 4)
  • SICP より
    • 組み込みの特殊形式if と同じ動作をするnew-if 手続きを定義してみる
      • ifがなぜ特殊形式であるか考えてみる
  • The Little Schemer より
    • 引数がatomであるか判定するatom?手続きを定義してみる
    • 引数のリストの要素がすべてatomであるか判定するlat?手続きを定義してみる
    • 引数で指定されたatomが引数のリスト内に存在するか判定するmember?手続きを定義してみる


さらにチャレンジ!

  • 末尾再帰に書き換えてみる
    • 上記のチャレンジ問題のうちループ及び再帰を用いたものを末尾再帰に書き直してみる


チャレンジ問題。。ヘビーだね(バック・トゥ・ザ・フューチャー )。さあ、ブログを書いてるヒマはないですよ。「芸能人歌がうまい王座決定戦スペシャル!!」を観てるヒマもないですよ。TwitterのListsをいじってるヒマもないですよ。Schemeのコードを書いてるヒマも、お、おお、書け書け!