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-02-14

Arcでcond

| 17:42 | Arcでcond - わだばLisperになる を含むブックマーク はてなブックマーク - Arcでcond - わだばLisperになる

どうもArcのifには我慢できなくなったのでマクロでcondを作ってみることにしました。

ちょちょっと作業をしてみたのですが、SLIMEに馴れ切った自分にはSLIMEの助けが無いとマクロが書けないことに、はたと気付いてしまいました。

つまりマクロの展開形が簡単に確認できないと無計画にマクロを書けなということですね…。

そういうわけで遠回りながら、まず簡単にmacex1の結果が見れるようにしてみました。

といっても、Emacsのlisp-eval-region関数をちょっといじっただけのものを作っただけです。

EmacsのArc-modeが待ち遠しい…。

(defun arc-mecex1-region (start end &optional and-go)
  (interactive "r\nP")
  (comint-send-string (inferior-lisp-proc) "(ppr (macex1 '")
  (comint-send-region (inferior-lisp-proc) start end)
  (comint-send-string (inferior-lisp-proc) "))\n")
  (if and-go (switch-to-lisp t)))

これで気休め程度はマクロが書きやすくなったので、condの作成

;; そのまんまバージョン
(mac cond body
  `(if ,@(mappend [list car._ `(do ,@cdr._)] body)))

;; elseも使えるバージョン
(mac cond body
  `(if ,@(mappend [list (let x _.0 (or is!else.x x)) `(do ,@cdr._)]
		  body)))

;; 動作
(cond (a b)
      (c d)
      (else e))
;マクロ展開 =>
;(if a (do b) c (do d) t (do e))

新しい構文も取り入れて書いてみましたが、ArcはどんどんPerl化して行っている気がする!

Gauche Night

15:49 | Gauche Night - わだばLisperになる を含むブックマーク はてなブックマーク - Gauche Night - わだばLisperになる

私は現在、引きこもりということもあり遠出するのはどうも億劫でGauche Nightに行こうかどうかずっと迷ってましたが、先日、もしまだチケットが買えるなら行こうと思いLoppiでチケットを購入することにしてみました。

番号からすると結構後の方だったので割とぎりぎりだったかもしれませんが、チケットは購入できました。

ということで、私もGauche Night観覧することにしました!

しかし、皆さん始発で帰るんですかね。

Schemerは沢山いる…ってのは当然なんですが、CLerはいないかなあ。

ArcでL-99 (P10 連続する要素をランレングス圧縮する)

| 15:24 | ArcでL-99 (P10 連続する要素をランレングス圧縮する) - わだばLisperになる を含むブックマーク はてなブックマーク - ArcでL-99 (P10 連続する要素をランレングス圧縮する) - わだばLisperになる

前回に引き続き連続する要素を纏める系の問題ですが、前回のpackを使えば簡単です。

そして昨日、新しいArcが公開されました。

新しい構文が追加されたり、関数名が変更されたり。

といっても、Arc at 3 Weeksにも書いてあるアイディアなので、今回採用になった、というほうが良いでしょうか。

この時は、x.yとx:yですが、これが、x.yと、x!yってことになったみたいです。

list.1.2.3
;=> (1 2 3)
list!x!y!z
;=> (x y z)

なんとなく微妙。

しかし、この構文を使って書くとコードの見た目が、かなり変わって来ます。

今回は、折角なので、新しい書法で書いてみました。

括弧がどんどん無くなる…。

(def encode (lst)
  ((afn (lst acc)
	(if no.lst
	    rev.acc
	    (self cdr.lst
		  (cons `(,(len car.lst) ,caar.lst) acc))))
   pack.lst () ))

(encode '(a a a a b c c a a d e e e e))
;=> ((4 a) (1 b) (2 c) (2 a) (1 d) (4 e))

ゲスト



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