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 |

2009-01-09

Getting Started in *LISP (19)

| 22:25 | Getting Started in *LISP (19) - わだばLisperになる を含むブックマーク はてなブックマーク - Getting Started in *LISP (19) - わだばLisperになる

3.5.3から再開です。

3.5.3 Sorting Pvar Values

前回に引き続き、データを変形するオペレータで有用なものには、sort!!あるとのこと。

これはpvarの範囲に作用するsortのようなもの。

(in-package :*lisp)
(*cold-boot :initial-dimensions '(8 8))
;; 8 x 8プロセッサを利用

;; グリッドを0-9の乱数で埋める
(*defvar random-numbers (random!! 10))

;; 確認してみる
(ppp random-numbers :end 20)
;>> 1 6 5 0 5 2 9 0 0 6 8 3 9 8 5 4 0 9 5 9
;=> NIL

プロセッサ番号が20より小さい範囲にsort!!を適用。述語は<=!!なので、<=で比較されるsortのようなもの。

(*when (<!! (self-address!!) 20)
  (ppp (sort!! random-numbers '<=!!) :end 20))
;>> 0 0 0 0 1 2 3 4 5 5 5 5 6 6 8 8 9 9 9 9 
;=> NIL

ソートのルーチンを自作したい場合のために、rank!!という関数も用意されている。

これは、pvarの数値的な順位を返す。

(*when (<!! (self-address!!) 20)
  (ppp (rank!! random-numbers '<=!!) :end 20))
;;; 1  6  5 0  5 2  9 0 0  6  8 3  9  8 5 4 0  9 5  9 pvarの値
;>> 4 13 11 3 10 5 19 2 1 12 15 6 18 14 9 7 0 17 8 16
;=> NIL

この例では、値が0の8番プロセッサが1番になっていることが確認できる。

次回、3.6から再開

ゲスト



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