Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2008-06-24

第5回 慢性的CL勉強会@Lingr 8時だョ!全員集合 告知

| 17:12 | 第5回 慢性的CL勉強会@Lingr 8時だョ!全員集合 告知 - わだばLisperになる を含むブックマーク はてなブックマーク - 第5回 慢性的CL勉強会@Lingr 8時だョ!全員集合 告知 - わだばLisperになる

今週も、開催させて頂きます!

ここ2回は短めに時間を区切って複数のお題をこなしてみましたが、続きものになると、前回からの復帰にもそれなりに時間がかかるので、復帰の時間がそれなりに必要になってくることに気付きました。

また、チャットの性質上、手を動かしてみないと分からないような内容はちょっと難しいのではないか、と思いはじめました。

ということで、今回、お題は2つで、

  • マクロ
  • CLの落し穴集(コーディングではまるところ)

として、マクロの巻は今回を終わらせて、残った時間で、CLの落し穴の巻を検討してみる、ということにしてみました。

前回までのコンディションシステムは、チャットでは難しい気がするので、どういう風に展開したら良いかを考えなおしています。

場所:Lingr: Common Lisp部屋
日時6/28 (土) 20:00から適当(途中参加/離脱/ROM歓迎)
勉強会の進行テキストを最初から参加者が眺めてゆき、質問があったり、議論になりそうなことがあったら議論してゆきます。
勉強会の目標CLに関して一つ位賢くなった気になること
時刻お題対象者参考リンク
20:00-THE POWER OF LISP MACROS (Edi Weitz氏)CLマクロ入門者的な方macros.lisp
-21:30位までCommon Lisp PitfallsCLでコーディングする方Common Lisp Pitfalls

また、「こういうのを勉強してみたい!」というのがあれば、このブログにコメント頂くか、Lingr等に書き置きしてみて下さい。好きなテーマを持ち込んでみて頂くというのも大歓迎です!

前回は、正味の勉強会より、終った後の方が盛り上がりましたので、21:30以降、LISP系の雑談をされたい方も歓迎しています!。別にお題があって話をしているわけではないので割とカオスですが(笑)…。

pfcでL-99 (P12 ランレングス圧縮の伸長)

| 16:14 | pfcでL-99 (P12 ランレングス圧縮の伸長) - わだばLisperになる を含むブックマーク はてなブックマーク - pfcでL-99 (P12 ランレングス圧縮の伸長) - わだばLisperになる

なんとなく無理矢理な感じですが、折角の遅延評価なので使ってみました。

(decode '((4 A) B (2 C) (2 A) D (4 E)))
;==> [A A A A B C C A A D E E E E]

(define (decode lst)
  (if (null lst)
      ()
      (let ((head (hd lst)))
        (++ (if (atom head)
                [head]
                (take (hd head)
                      (item-list (hd (tl head)))))
            (decode (tl lst))))))

(define (item-list item)
  (cons item (item-list item)))

オリジナルのSchemeインタープリタを動かそう

| 00:31 | オリジナルのSchemeインタープリタを動かそう - わだばLisperになる を含むブックマーク はてなブックマーク - オリジナルのSchemeインタープリタを動かそう - わだばLisperになる

Accesscom.com | SF Bay Area Internet Access Providerさんのページを眺めていたら、最初のSchemeの論文のインタープリタをCLに移植した(オリジナルはMacLISP)という面白そうなものがあったので早速試してみることにしました。

ここのlambda papersのリンクからファイルを取得できます。

このファイルをコンパイルして読み込ませたイメージをSBCLを使って実行ファイルにしてみました。

(compile-file "/tmp/scheme")
(load "/tmp/scheme")

(defun scheme-repl ()
  (handler-case (scheme)
    (error (cond)
      (declare (ignore cond))
      (format t "An error occurred.")
      (scheme-repl))))

(pushnew (lambda ()
           (scheme-repl))
         sb-ext:*init-hooks*)

(sb-ext:save-lisp-and-die "/tmp/scheme-1975" :purify 'T :executable 'T)

というようなファイルをmake-scheme.lispとでも名前を付けて、配布物の中のscheme.lispを/tmpに置いて、

$ sbcl --load make-scheme

と実行しすると、/tmp/にscheme-1975ができます。

実行可能ファイルになってますので、実行するとschemeのインタープリタが起動します。

そのままでは、エラー時にデバッガに落ちて面倒なので、適当に再度実行するようにしてありますが、もっとちゃんとした対処方法があると思います。

This is SCHEME 0 running in SBCL 1.0.17
SCHEME -- Toplevel

(define fact-iter
  (lambda (n)
    (labels ((fact1 (lambda (m ans)
                      (if (= m 0)
                          ans
                          (fact1 (- m 1)
                                 (* m ans))))))
      (fact1 n 1))))
==> 
FACT-ITER 
==> 
3628800 
==> 

まとめ/その他

にオリジナルのSchemeの論文があります。

また、EMACSで、(run-scheme "/tmp/scheme-1975")とすれば、EMACS経由で使えます。(quit)で終了。

どうも、doマクロ等がちゃんと動いてない気もするのですが、その辺をデバッグするのも一興ではないでしょうか(*'-')

ゲスト



トラックバック - http://cadr.g.hatena.ne.jp/g000001/20080624