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-11

S式だった頃のDylan (2)

| 08:53 | S式だった頃のDylan (2) - わだばLisperになる を含むブックマーク はてなブックマーク - S式だった頃のDylan (2) - わだばLisperになる

ちょっと前のエントリでS式Dylanのマニュアルが見付けられない、ということを書きましたが、タイムリーなことに、comp.lang.lispで、同じようにS式Dylanのマニュアルを探してる、という方が、入手できる方法はないかを質問したところ、ほぼ即答で、ウェブからマニュアルを入手できるよ、との回答が!

昔は、AppleのftpでPS版も配布してたらしいんですが、それをHTML化したものでしょうか。

ということで、早速入手!

doが一般化された、forとか面白いです!

ArcでL-99 (P07 リストの中身を平板化する)

| 07:18 | ArcでL-99 (P07 リストの中身を平板化する) - わだばLisperになる を含むブックマーク はてなブックマーク - ArcでL-99 (P07 リストの中身を平板化する) - わだばLisperになる

平板化って言葉がなんだか良く分からないのですが、変換できたので使ってみます。

おなじみのflattenの作成ということのようです。

nilを要素とするか、空リストと見るかで動作が変ってしまうと思うんですが、どっちがメジャーな解釈なんでしょう。

とりあえず、nilは、要素とすることにしてみました。

Arcには、flatがあって、こっちは、nilはリストってことになるようです。

また、appendは、Arcでは+か、joinになります。

(def flatten (lst)
  (rev ((afn (lst acc)
	     (if (no lst)
		  acc
		  (self (cdr lst) 
			(if (atom (car lst))
			    (cons (car lst) acc)
			    (+ (self (car lst) () ) acc)))))
	lst () )))

(flatten '(1 2 (3 (4 5 (()(()(((((((6((((((7 8 9)))))))10)))))))))()) 11 (12)))
;-> (1 2 3 4 5 nil nil 6 7 8 9 10 nil 11 12)

(flat    '(1 2 (3 (4 5 (()(()(((((((6((((((7 8 9)))))))10)))))))))()) 11 (12)))
;-> (1 2 3 4 5 6 7 8 9 10 11 12)