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

CLで学ぶ「プログラミングGauche」 (9.6)

| 16:12 | CLで学ぶ「プログラミングGauche」 (9.6) - わだばLisperになる を含むブックマーク はてなブックマーク - CLで学ぶ「プログラミングGauche」 (9.6) - わだばLisperになる

9.6 リストの変更と 一般化set!

Gaucheのように一般化されたset!は、CLにもclsetfという名前で存在しています。

読み出して来た場所に値を格納するというのは便利で、Schemeより代入を使う傾向のあるCLでは、仲間が沢山あり、また、このsetfをカスタマイズする構文が用意されています。(defsetf foo ...)や、(defun (setf foo) ..)等。

〜fという系統や、push、pop等の仲間が読み出して来た場所に代入する代表的なものかと思います。

(let ((foo (copy-tree '(1 2 3 (4 (5 6 7 8 9))))))
  ;; 値を代入
  (setf (first foo) 1000)

  ;; 2番目の数を1000増加させる
  (incf (second foo) 1000)

  ;; 4番目のリストをポップ
  (pop (fourth foo))

  ;; 4番目のリストにプッシュ
  (push 888 (fourth foo))

  ;; 4番目のリストにプッシュ
  (push 999 (fourth foo))
  foo)

;==>(1000 1002 3 (999 888 (5 6 7 8 9))))

ゲスト



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