Hatena::Groupsicp

SICP読書メモ

2009-07-07

3ヶ月ぶり 11:17

Real world haskell に浮気してて忘れてた

http://book.realworldhaskell.org/read/index.html

3ヶ月放置だったのね、しまった・・

このまま放置すると後味悪いので、少しづつでも進めよう。

でも同じ関数型言語でもLisp(Scheme)とhaskell違いがあっても面白いね

やっぱ一番の差異は "型" の存在かな?

型を安全で便利と思うか、俺様にはそんな安全装置不要だぜガンガンいくぜ、と思うかによってメリットにもなるし、デメリットにもなるし、オブジェクト指向でいうRubyJava/C#の違いとか?

でもhaskell型推論があるから省略もできるし、型からのパターンマッチがずいぶん便利だし、そういう意味ではhaskellの型は一歩リードだよなぁ

あとhaskellの方が参照透明性を大事にしてて頑固だよね、なんてったって純粋関数型言語だもんね。英語で言うと purely functional programming language で、名前にpureが付くなんて!頑固だなー

GracelynnGracelynn2011/04/11 01:28JTC4Tk In awe of that answer! Really cool!

ursidhuursidhu2011/04/12 04:21HCL1f2 <a href="http://clawhrklzdgd.com/">clawhrklzdgd</a>

cwajsarzcwajsarz2011/04/13 05:37M4sXt7 , [url=http://xszovxavalcm.com/]xszovxavalcm[/url], [link=http://ovluxacvmggh.com/]ovluxacvmggh[/link], http://lowwtojaxfww.com/

pwrvvppgoipwrvvppgoi2011/04/24 11:32AxiveJ , [url=http://fnciypwolmdd.com/]fnciypwolmdd[/url], [link=http://msospxzlofrr.com/]msospxzlofrr[/link], http://vqnntyxibqlo.com/

SanjivSanjiv2012/12/25 08:39My hat is off to your asttue command over this topic-bravo!

aeiqlzjrfdraeiqlzjrfdr2012/12/27 03:395w739s <a href="http://ycxtxvnkamwz.com/">ycxtxvnkamwz</a>

fggchetxejfggchetxej2012/12/28 10:24TsfGE4 , [url=http://dobpofgpbxax.com/]dobpofgpbxax[/url], [link=http://nkbccpjoypnf.com/]nkbccpjoypnf[/link], http://ayxkpihoceol.com/

ihvpgcxcrnihvpgcxcrn2014/02/04 23:26eaotctjdq, <a href="http://www.qcckalxias.com/">hfvaoohoom</a> , [url=http://www.xkypcgkewa.com/]ovljyrowdw[/url], http://www.mrhkibhjdk.com/ hfvaoohoom

トラックバック - http://sicp.g.hatena.ne.jp/tkmr2000/20090707

2009-03-29

4.3.3 amb処理系の実装 01:22



4.3.2 非決定性プログラムの例 01:22

非決定性プログラムの例が山盛り。

が、実際に実行できないといまいち実感が湧かない、ということで4.3.3 で処理系を実装してから読む。

4.3.1 非決定性計算 - ambと探索 01:22

4.2の遅延評価に続いて、Scheme処理系に非決定性計算を組み込む。

二つの整数のリストから素数の組み合わせを探す時、通常の計算だとリストの組み合わせを全て作って、素数のペアを抜き出す。

遅延リストの場合、リストの組み合わせを最初に作らない(評価を遅延させる)、という点以外は同様。非決定性計算の場合、式が複数の値を取り得て、素数のペアを探索する処理は非決定性計算が組み込まれた処理系が処理する。等々、非決定性計算と遅延リストの比較等ありつつ、どう実装するかに触れていく。

今回は ”深さ優先探索” というアプローチで実装していく、とのこと。

4.2.3 遅延リストとしてのストリーム 01:22

遅延評価が組み込まれた処理系で、以前実装したストリームを再度試してみる。

以前はかなり回りくどい工夫をしたけど、今回は cons / car / cdr を合成手続きで定義して

遅延評価させるだけで良い。

   (define (cons a b)
     (lambda (x) (x a b)))

   (define (car pair)
     (pair (lambda (a b) a)))

   (define (cdr pair)
     (pair (lambda (a b) b)))

SICPの最初の頃出てきた、手続きで表現した対(とリスト)で実装。以前実験したストリーム演算、一通り試したら一応ちゃんと動いていた。

但し今回はリスト=ストリームなので、より自然に表現できる。

   ;;リストのn番目を表示(動作確認用)
   (define (list-ref items n)
     (print (car items))
     (if (< n 1)
         (car items)
         (list-ref (cdr items) (- n 1))))

   ;;リストをフィルタする
   (define (list-filter p items)
     (if (p (car items))
         (cons (car items)
               (list-filter p (cdr items)))
         (list-filter p (cdr items))))

   ;;map
   (define (list-map proc items)
     (cons (proc (car items))
           (list-map proc (cdr items))))

   ;;複数のリストを引数に取り、それを引数の手続きで一つにするmap
   (define (lists-map proc list1 list2)
     (cons (proc (car list1) (car list2))
           (lists-map proc (cdr list1) (cdr list2))))

   ;;list-mapを利用して、リストの乗算
   (define (scale-lists items factor)
     (list-map (lambda (x) (* x factor)) items))

   ;;lists-mapを利用して、リストの加算
   (define (add-lists list1 list2)
     (lists-map + list1 list2))

   ;;無限に1が続くリスト
   (define ones
     (cons 1 ones))

   ;;整数 numbers は ones と numbers を加算したリスト
   ;; 1
   ;; 1 + (1)
   ;; 1 + (1 + 1)
   ;; 1 + (1 + 1 ....)
   (define numbers
     (cons 1 (add-lists ones numbers)))

   ;;偶数 even-numbers は2で割りきれる整数
   (define even-numbers
     (list-filter
       (lambda (x) (< (- x (* (/ x 2) 2)) 1))
       numbers))

   (list-ref even-numbers 10)

   ;;フィボナッチ数列は、フィボナッチ数列と(cdr フィボナッチ数列)の加算リスト
   ;;
   (define fib-numbers
     (cons 1
           (cons 1
                 (add-lists (cdr fib-numbers)
                            fib-numbers))))

   (list-ref fib-numbers 10)

   ;;素数primesは、素数を判定するprime?手続きでフィルタした整数
   (define primes
     (list-filter prime?
                  (list-filter (lambda (n)(> n 1)) numbers)))

   ;;素数を判定するprime?は、素数列primesで割り切れない整数の場合trueを返す
   (define (prime? n)
     (define (iter ps)
       (if (> (square (car ps)) n)
           #t
           (if (divisible? n (car ps))
               #f
               (iter (cdr ps)))))
     (iter primes))

   (list-ref primes 10)

sobdtmarvdsobdtmarvd2013/12/17 16:47ccgkctjdq, <a href="http://www.qbmpdylnok.com/">liqdnfobbj</a> , [url=http://www.nfgrvpybhu.com/]flnnrlozne[/url], http://www.qebafatuhp.com/ liqdnfobbj

トラックバック - http://sicp.g.hatena.ne.jp/tkmr2000/20090329

2009-03-22

4.2 遅延評価 01:29

4.2.1 正規順序と作用的順序

Schemeは作用的順序評価だけど,これまでに作った処理系に手を加えることで、正規順序評価

(遅延評価)を試す.

仕様としては

・基本手続きは作用的順序評価

・合成手続き(lambda式)は正規順序評価

下記の変更を加える

・lambda式の評価時は,引数を遅延オブジェクトに変換するだけで評価は遅延させる.

 - 遅延オブジェクト = (cons 実際の式 . 環境)

・if式の条件部にあたる式は強制評価を行う.

・基本手続きの評価時は、引数の強制評価を行う.

 - 強制評価 = (eval 実際の式 環境)

その名の通り、式の評価を必要になるまで遅延させる.

意外に簡単


;;問4.27 下記の式を遅延評価させるとどうなるか ;;;
(define count 1)
(define (id x)
  (set! count (+ count 1))
  x)

(print count)
(define w (id (id 10)))
(print count)
(print w)
(print count)

1
2
10
3

w が遅延オブジェクト(実体 => (id 10)) に束縛されるので
評価される度に(id x)が実行される。のかな。

BuffieBuffie2016/05/10 23:01An intleligent point of view, well expressed! Thanks!

TrixTrix2016/05/14 09:37Ova ekipa je zestoko pokarala Lenovo Srbija i sad krade na stranici Moment Power, nagrada je 3.000e!VA:F <a href="http://muitckjrnoy.com">[16]120_1..69please</a> wait...(1 vote cast)VA:F [1.9.20_1166](from 0 votes)

トラックバック - http://sicp.g.hatena.ne.jp/tkmr2000/20090322

2009-03-14

4.1.6 内部定義 00:33

手続き内のdefine式による定義は、振る舞いとしては同時に評価されるべき?


((lambda (n)
  (define a (+ b 10)
  (define b (- n 3))
  (+ a b)))
 10)

という式があった時に、a定義中のbは

- 定義はそれぞれ順番に処理されるので、未定義でエラーになる

- 定義は同時に起こるべきなので 7 になり正常

どっちが正しいかという問題4.19 、 確かに定義は同時に起こる

っていう意見も正しい気がする。

欄外のコラムでは「同時に起こるべきだけど、実装が難しいので現実的にはエラーかな」とある。

define式をletrecに展開し、変数のスコープをはっきりさせる例もあった


(define a <exp1>)
(define b <exp2>)
(a (b 123))


(let ((a null) (b null))
  (set! a <exp1>)
  (set! b <exp2>)
  (a (b 123)))

に変換すれば、exp1とexp2がそれぞれを参照できる。あと評価がlambda式等で遅延されてれば問題無い?


;;問 4.20 letrecをletを利用したマクロで実装する ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;let を lambda に展開する
(define-syntax let
  (syntax-rules ()
    ((let ((_k _v) ...) _b ...)
     ((lambda (_k ...) _b ...) _v ...))))

;;letrec を let と set! に展開する。局所変数の評価タイミングがset!時に変わるので
;;相互に参照する場合等上手くいく、のかな。。
(define-syntax letrec
  (syntax-rules ()
    ((letrec ((var1 init1)) body ...)
     ((lambda (var1)
        (let ((temp1 "undefined"))
          (set! temp1 var1)
          body ...)) init1))
    ((letrec ((var1 init1) params ...) body ...)
     (letrec (params ...)
       ((lambda (var1)
          (let ((temp1 "undefined"))
            (set! temp1 var1)
            body ...)) init1)))))

;;問 4.21 lambdaだけで再帰手続きを実装する ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;defineを利用せず(無名関数で)再帰処理を行う

;;define;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define (fact n)
  (if (= n 1)
      1
      (* n (fact (- n 1)))))

(fact 10)

;;lambda;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
((lambda (n)
   ((lambda (fact)
      (fact fact n))
    (lambda (f k)
      (if (= k 1)
          1
          (* k (f f (- k 1)))))))
 10)

;;YCombinator化;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;こんな形にしたい
(define fact-maker
  (lambda (proc)
    (lambda (n)
      (if (= n 1)
          1
          (* n ((proc proc) (- n 1)))))))

(print ((fact-maker fact-maker) 8))

;;(proc proc) を追い出す
;;((proc proc) 5) は ((lambda (arg)((proc proc) arg)) 5) と等価なので
(define fact-maker2
  (lambda (proc)
    (lambda (n)
      (if (= n 1)
          1
          (* n
             ((lambda (arg)((proc proc) arg))
               (- n 1)))))))

(print ((fact-maker2 fact-maker2) 8))

;;(lambda (arg)((proc proc) arg)) を関数外に追い出す
(define fact-maker3
  (lambda (f)
    (lambda (n)
      (if (= n 1)
          1
          (* n
             (f (- n 1)))))))

;;を再帰的に実行したい。。
(lambda (proc)
  (fact-maker3
   (lambda (arg) ((proc proc) arg))))


;;factで利用したlambda式の使い方で
((lambda (proc)
   (fact-maker3
    (lambda (arg) ((proc proc) arg))))
 (lambda (proc)
   (fact-maker3
    (lambda (arg) ((proc proc) arg)))))


;;固有名を抜き出す
(lambda (f)
  ((lambda (proc)
     (f (lambda (arg) ((proc proc) arg))))
   (lambda (proc)
     (f (lambda (arg) ((proc proc) arg))))))


;;試してみる
(define Y
  (lambda (f)
    ((lambda (proc)
       (f (lambda (arg) ((proc proc) arg))))
     (lambda (proc)
       (f (lambda (arg) ((proc proc) arg)))))))

;;自分自身を受け取ることを期待する
(define fact_y
  (lambda (me)
    (lambda (n)
      (if (= n 1)
          1
          (* n (me (- n 1)))))))

(print
 ((Y fact_y) 8))

;;参考にしました。
;;http://www.loveruby.net/ja/misc/ycombinator.html

lambda式だけで再帰手続きをする、は面白かった。

なるほど、、自分自身を実行するために、引数に入れて続ければ良いのか。

うーん、syntax-ruleを実装してて時間が掛かった。 "..." は単純な可変長引数のような物かと思ってたら、誤解してた

もう少し高度なパターンマッチのシンボルだったのか。

まだマクロ内と実行時のシンボルの衝突が解決できてない気がするけど、まあいいや。次に進もう。

DellDell2012/01/10 09:09Normlaly I'm against killing but this article slaughtered my ignorance.

wutcwpiwutcwpi2012/01/10 19:50kheObL <a href="http://dxtxlvctfdbe.com/">dxtxlvctfdbe</a>

ikpwrvikpwrv2012/01/11 00:449NFH2Z , [url=http://brxakccahajj.com/]brxakccahajj[/url], [link=http://tgkrbfylyuqa.com/]tgkrbfylyuqa[/link], http://relikozwphgs.com/

rehgaqcsarehgaqcsa2012/01/12 23:27kq0Stw <a href="http://tieyaqwknxqx.com/">tieyaqwknxqx</a>

DeloresDelores2016/05/11 01:36Merci pour cet article qui m’a fait découvrir ce photographe qui joue savamment avec les couleurs. Je connaissais déjà le festival de Perpignan, et ça me donne encore plus envie d’y aller un jo&83#r2u0;Bonne journée

JennisJennis2016/05/11 19:37Mama por Dios deje de darle ilusiones al chino hombre no hay derecho, la gente hace tonterias por amor, eso lo debe saber usted que ve mas de una novela y se sabe mas de un <a href="http://psgazvhv.com">chi.me...sJugar</a> con la gente no esta bien, por mas pequeña que sea ;)

トラックバック - http://sicp.g.hatena.ne.jp/tkmr2000/20090314

2009-03-04

4.1 超言語的抽象 00:33

いよいよ4章、SchemeインタプリタSchemeで作ってみよう。という話が続く。

要はSchemeの計算プロセスの read -> eval -> apply の、evalとapplyの部分を作ってみる、という感じ。

これはこれでなかなか面白いけど、面白そうだったので勉強としてCで実装した

lex --> yacc --> eval.c --> apply.c という感じ。yaccを初めてちゃんと使ったけど便利。

Schemeが元々シンプルなだけあって、2週間くらいでちゃんと動き出した。

やってみて色々疑問だった部分も解消したし、面白かった。暇があったら libffi で Scheme --> C の関数呼び出しをダイナミックにするのも楽しそう。

と、まだGCや継続、やろうと思えば色々ありそうだけどSICPに復帰しよう。

次は遅延評価を組み込んでいくみたい。

CheyanneCheyanne2012/01/10 04:48Keep these articles ciomng as they've opened many new doors for me.

ccnrimgccnrimg2012/01/10 19:45OZkIfq <a href="http://rywnzyjqowcg.com/">rywnzyjqowcg</a>

nssomlnnnssomlnn2012/01/11 00:47kdSvn6 , [url=http://lxpiuxoqsmub.com/]lxpiuxoqsmub[/url], [link=http://zinhegqpodzd.com/]zinhegqpodzd[/link], http://oboiopctrqhc.com/

rbncbyfyrwrbncbyfyrw2012/01/12 23:41CReGv9 <a href="http://twfxkdhyylof.com/">twfxkdhyylof</a>

zsnrbzfeazsnrbzfea2012/01/15 02:082aUkp3 , [url=http://mifwftvqtrac.com/]mifwftvqtrac[/url], [link=http://odhrmwarxqnh.com/]odhrmwarxqnh[/link], http://rebxurtcjdqp.com/

KaycieKaycie2016/05/11 00:18A river bubbles up out of the ground and cascades down a mountain side. It eneorntcus obstacles, large rocks, tree roots and deliberate blocks, and often plunges into the unknown. It rests quietly as it navigates meadows and fields and rushes quickly through dark canyons. Its life is controlled chaos.I prefer to live like the river, ever watchful and trying to be prepared maybe even building a block here and there, but going with the flow.

トラックバック - http://sicp.g.hatena.ne.jp/tkmr2000/20090304

2009-02-16

3.5.3 ストリームパラダイムの開発 22:54

ストリームを使った計算を発展させる。ストリームの加速(いまいち・・)

DeliaDelia2011/04/10 21:37Fay7BJ Walking in the presence of giants here. Cool thinking all around!

xetulomqxetulomq2011/04/12 03:46IYaa0a <a href="http://ptfnnxqukcqb.com/">ptfnnxqukcqb</a>

wnhvagawnhvaga2011/04/13 06:483no3qx , [url=http://uszcmyacvjhv.com/]uszcmyacvjhv[/url], [link=http://bbmkxjqyxgqy.com/]bbmkxjqyxgqy[/link], http://wsbiiiiyuser.com/

jhwqybvjhwqybv2011/04/23 01:06gIMu68 <a href="http://pgyylrtwbjva.com/">pgyylrtwbjva</a>

jwpsmzbjwpsmzb2011/04/24 10:58C2fSXQ , [url=http://zcovcilqekbu.com/]zcovcilqekbu[/url], [link=http://neizyosdyzyy.com/]neizyosdyzyy[/link], http://bqwvtrdvpurq.com/

トラックバック - http://sicp.g.hatena.ne.jp/tkmr2000/20090216

2009-02-15

3.5.2 無限ストリーム 22:54

ストリームを元に、無限の長さを持つリストを表し,利用例として色々な数列を実装する。

整数列,素数列,フィボナッチ数列など.

依然実装したストリームを利用しない場合と比較して,シンプルで分かり易い実装になり,最終的なフィボナッチ数列の実装は自然言語でフィボナッチ数列を定義するのとほぼ同じコードで定義できる。

(define fibs
  (cons-stream 0
    (cons-stream 1
      (add-stream (stream-cdr fibs)
                  fibs))))

;;フィボナッチ数列は
;;0と
;;1から始まり
;;n番目の要素は (n-2) + (n-1) になる
;;   -> (+ フィボナッチ数列 (一つ前のフィボナッチ数列))

AnjumAnjum2012/10/07 00:03I feel stiasfied after reading that one.

bzyqtpxoeebzyqtpxoee2012/10/07 17:53G6vQY1 <a href="http://jxlxgcpwtret.com/">jxlxgcpwtret</a>

xbwzymybjxbwzymybj2012/10/08 04:21byalp5 , [url=http://gtlppflqvbcm.com/]gtlppflqvbcm[/url], [link=http://ehdchjikpjed.com/]ehdchjikpjed[/link], http://ppaikeszpbxf.com/

tgjkljtgjklj2012/10/08 17:57HfLLpH <a href="http://fxyxmlcrkfxm.com/">fxyxmlcrkfxm</a>

qfoqrnrvakqfoqrnrvak2012/10/10 02:18konBuB , [url=http://ipfugxjicwzf.com/]ipfugxjicwzf[/url], [link=http://bmotdqtuzdjs.com/]bmotdqtuzdjs[/link], http://djqxuuegjnob.com/

トラックバック - http://sicp.g.hatena.ne.jp/tkmr2000/20090215

2009-02-14

3.5.1 ストリームは遅延リスト 17:23

前章までで現実世界の問題を解決するために,局所状態を持つ現実世界のオブジェクトを局所変数を持つ計算オブジェクトとして表現した.この他の解決法として,量xの時間的変化を時の関数x(t)として表現できるかもしれない.

時間tを無限に近いリストとして表現するために,新しいデータ構造ストリームを実装する.

ストリームは,cdr部の評価が構成時ではなく選択時に評価されるリスト(必要になるまで評価されない),として実装する。cdrの遅延評価はcdr部をlambdaに含めることで実現し、実装はマクロを利用した。

ServenaServena2012/01/10 12:46This makes everything so compleetly painless.

nbjjpasqpnbjjpasqp2012/01/11 00:24tOXkLv , [url=http://uabwmcczjzlt.com/]uabwmcczjzlt[/url], [link=http://fcscccapgiyx.com/]fcscccapgiyx[/link], http://dzrnmbomqyqb.com/

xhugjvajxhugjvaj2012/01/15 23:57K2IqgX , [url=http://qqwwzngkaxpk.com/]qqwwzngkaxpk[/url], [link=http://ydcmvlacqzhi.com/]ydcmvlacqzhi[/link], http://xmyysbcdewes.com/

トラックバック - http://sicp.g.hatena.ne.jp/tkmr2000/20090214

2009-02-12

3.4.2 並列性の制御機構 01:40

並列処理を現実な物にするため、並列処理の制御機構を考える。今回はSerializer(直列化変換器)と呼んでいるそれが、処理の競合を調整する。

serializerの実装の本質は mutexの確保 -> 処理本体の実行 -> mutexの解放、というシンプルな物。


同じserializerでラップされた手続きは、同じ(局所変数の)mutexを確保しようとするので競合が生まれ、並列して処理されることがないように保証される。

シンプルだけど判り易い。


銀行の例では、口座がserializerを持つ。単一口座の引き出し・預け入れは良いけど、複数口座を介するexchange処理の場合serializerを外部に取り出す必要が生まれる。

(serializer1 (serializer2 (exchange))) と関連する二つのserializerでexchange手続きを覆うことで、二つのserializerのmutexを確保する。(ことで競合する処理を回避する)


この章は実装も、問題の例も、コラムも面白かった。

章の最後でちゃんとデッドロックの面倒な問題も提示される。


トラックバック - http://sicp.g.hatena.ne.jp/tkmr2000/20090212

2009-02-11

3.4.1 並列性 01:40

代入を取り入れた事で、参照透明性が無くなる・置き換え評価モデルの破綻等の副作用が起こる。その本質は、プログラム言語へ "時間" を取り入れた事に起因する。代入を取り入れた場合、値を持つ式は実行するタイミングで異なる値を返す可能性を持つようになった。

計算オブジェクトが時間に左右されなければ、処理を並列で実行できるかもしれない。計算機の効率からも並列で実行できるのが望ましい、が代入を取り入れたことで並列実行はさらに難しくなる。

;;問 3.38 下記の手続きを逐次・並列で実行した場合、起こりえる結果は?

;;初期値
(define balance 100)

;;peter
(set! balance (+ balance 10))
;;paul
(set! balance (- balance 20))
;;mary
(set! balance (- balance (/ balance 2)))

;;逐次実行の場合

1) peter -> paul -> mary
2) paul -> peter -> mary
100 -> {80 -> 90} -> 45

3) mary -> peter -> paul
4) mary -> paul -> peter
100 -> 50 -> {30 -> 40} -> 40

5) peter -> mary -> paul
100 -> 110 -> 55 -> 35

6) paul -> mary -> peter
100 -> 80 -> 40 -> 50


;;並列実行の場合
さらに複雑な状態になる。balanceへ代入前の値が上書きされる可能性がある。
balance  (set! balance (+ balance 10))     (set! balance (- balance 20))
-|-----------------|--------------------------------|--------------------
100                |                                |
100      (set! balance (+ 100 10))         (set! balance (- 100 20))
100       (set! balance 110))               (set! balance 80)
80                 |                           set! を実行
110         set! を実行                             |

正しい結果は90の筈、110が結果??


3.3.5 制約の拡散 01:40

状態を持ったデータオブジェクトで、制約ネットワークを作る。

制約を表す constraint と、状態を持ったネットワークを表す connector を実装する。


constraint は単純に加算・乗算の仕様から考える。

connector は状態として「値・値を設定した制約・関係のある制約」を持つ。


ここで局所変数による状態とset!による代入が無いと、状態の表現が面倒そう

代入を許すことで、各オブジェクトが分離できシンプルになっていると思う。

DebrahDebrah2011/08/18 12:17I'm sohcekd that I found this info so easily.

evjawdalevjawdal2011/08/19 03:27zmiAKu <a href="http://srymlhkvrzwd.com/">srymlhkvrzwd</a>

tsrbosioygvtsrbosioygv2011/08/25 17:55pK6hHR <a href="http://lytikawgublr.com/">lytikawgublr</a>

fmnajajfmnajaj2011/08/30 20:086TSqZR , [url=http://phckitrhailk.com/]phckitrhailk[/url], [link=http://tbiidsszwxlb.com/]tbiidsszwxlb[/link], http://dcvxhasrlakt.com/

MartinMartin2012/10/08 11:59You've cpatrued this perfectly. Thanks for taking the time!

djzpcvrldjzpcvrl2012/10/09 14:45GssiCS , [url=http://kkqxufvrmtlr.com/]kkqxufvrmtlr[/url], [link=http://ptmdyihyjohv.com/]ptmdyihyjohv[/link], http://krvcztvrgqax.com/

vapioqheehcvapioqheehc2012/10/10 22:43YrRwmG <a href="http://hqvntqrhbduy.com/">hqvntqrhbduy</a>

myizmkxfmyizmkxf2012/10/12 02:41HFBqil , [url=http://awppeoridryn.com/]awppeoridryn[/url], [link=http://habezztnggjo.com/]habezztnggjo[/link], http://onvhurbpgxqr.com/

トラックバック - http://sicp.g.hatena.ne.jp/tkmr2000/20090211