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 |

2006-09-28

勉強するよ.14

| 21:18 | 勉強するよ.14 - わだばLisperになる を含むブックマーク はてなブックマーク - 勉強するよ.14 - わだばLisperになる

Schemeの勉強.14

今日は、第13章でジャンプの巻

call-with-current-continuationを使ったループからの

脱出とか、継続を保存して、再開とか。

なんでも良いけど、例題が難しい。

Schemeの世界はこういうの多いけども。

継続を自由に扱えるってのは、SchemeのSchemeらしいと

ころだけども、良く継続は難しい概念という風に説明さ

れてて、自分も最初は何だか良く分からなかった。

しかし、SchemeとActor理論という良くできたActor理論

の解説ページを読んで、何となく理解できたのだった。

世の中の継続の解説ページは、大域脱出、CPS、末尾再

帰、等がごちゃごちゃになってることが多いので、混乱

してしまう。

そんな時には、Actor理論だけ押えとけば、すっきり納

得できるんじゃないだろうかと思わなくもない。

そしてプログラム言語に限らず、継続っていう概念は、

人間の普段の生活にも沢山現れる気がする。

例えば、牛乳パック。コンビニに並んでいる牛乳パック

には沢山の継続が含まれている。最低でも、「最終的に

は燃えるごみになる」という継続が含まれていると思う

、そんな秋。

2006-09-27

勉強するよ.13

| 21:47 | 勉強するよ.13 - わだばLisperになる を含むブックマーク はてなブックマーク - 勉強するよ.13 - わだばLisperになる

Schemeの勉強.13

今日も、第12章の途中

うーん、この章で行っていることは、自前のオジェクトシステムを

構築しつつ、その仕組も一緒に学習しよう、ということなのか。

Gaucheにはオジェクトシステムがあるので、内容をそれで書き直し

てみれば良いのだろうか。

っていうか、MzScheme使って実習しろよ、ということになってしま

うのか。

いや、しかし、MzSchemeを使ってみたとしても、説明が濃縮され過

ぎていて良く分かんないから一緒かもしれない。

とりあえず、Gaucheで書いてみたが、例題の意図を汲み取れていな

いので、何がなんだか分からない模様に。

別々にしちゃったけど、クラスの中でメソッドが定義されているの

が醍醐味であり、別々に分けちゃいけないのかしら。

;; 12.1
;; クラスを定義
(define-class trivial-bike-class ()
  ((frame :init-keyword :frame)
   (size :init-keyword :size)
   (parts :init-keyword :parts)))

;; 確認
;(d trivial-bike-class)

;; インスタンスを作成
(define my-bike
  (make trivial-bike-class
    :frame 'cromoly
    :size '18.5
    :parts 'alivio))

;(d my-bike)
;=> gosh> (d my-bike)
;   #<trivial-bike-class 0x815f750> is 
;    an instance of class trivial-bike-class
;   slots:
;     frame     : cromoly
;     nsize      : 18.5
;    parts     : alivio


;; メソッドを含むクラス ってのが良く分からないというか、何が
;; どうなってるのか良く分からない。
;; define-classとdefine-methodで作ってみた。

;; クラスを定義
(define-class bike-class ()
  ((frame :init-keyword :frame :accessor frame-of)
   (size :init-keyword :size :accessor size-of)
   (parts :init-keyword :parts :accessor parts-of)
   (chain :init-keyword :chain :accessor chain-of)
   (tires :init-keyword :tires :accessor tires-of)))

;; 確認
;(d bike-class)

;; インスタンスの作成
(define my-bike
  (make bike-class
    :frame 'titanium ; I wish
    :size 21
    :parts 'ultegra
    :chain 'sachs
    :tires 'continental))

;; 確認
; gosh> (d my-bike)
; #<bike-class 0x81713d0> is an instance of class bike-class
; slots:
;   frame     : titanium
;   size      : 21
;   parts     : ultegra
;   chain     : sachs
;   tires     : continental

;(size-of my-bike)
;=> 21

;; メソッドを定義
(define-method check-fit ((me bike-class) inseam)
  (let ((bike-size (size-of me))
	(ideal-size (* inseam 3/5)))
    (let ((diff (- bike-size ideal-size)))
      (cond ((<= -1 diff 1) 'perfect-fit)
	    ((<= -2 diff 2) 'fits-well)
	    ((< diff -2) 'too-small)
	    ((> diff 2) 'too-big)))))

; gosh> (check-fit my-bike 32)
; =>fits-well

2006-09-24

勉強するよ.12

| 12:53 | 勉強するよ.12 - わだばLisperになる を含むブックマーク はてなブックマーク - 勉強するよ.12 - わだばLisperになる

Schemeの勉強.12

今日は、第12章の途中

オブジェクトとクラスの章だけども、いきなり難しいと

いうか、プログラム言語初学者対象って感じじゃなくなっ

てしまってる香り。

Gaucheを使って学習する場合、CLOSっぽいGaucheのオジェ

クトシステムがあるので、それと比較しながら学習する

のが良いのだろうが、自分は、MzScheme、Gauche、オジェ

クト指向、それぞれが良く分かっていないので、何をす

べきかが全然見えてこない。が、しかし、適当に進むこ

とにはしてみよう。

とりあえず、例示コードのの適当な書き直し。

(define-class standard-class ()
  ((slots :init-keyword :equ)
   (superclass :init-keyword :superclass)
   (method-names :init-keyword :method-names)
   (method-vector :init-keyword :method-vector)))

(define trivial-bike-class
  (make standard-class
    :superclass #t
    :slots '(frame parts size)
    :method-names '()
    :method-vector #()))

12章の巻は、まだ続く。

2006-09-19

勉強するよ.11

| 23:02 | 勉強するよ.11 - わだばLisperになる を含むブックマーク はてなブックマーク - 勉強するよ.11 - わだばLisperになる

Schemeの勉強.11

今日は、第11章終了。

今日は、システムインターフェース近辺を学ぶ。

結構処理系依存な香りで、

Gaucheだと、

(file-exists? "/tmp/foo")

(define delete-file sys-remove)

(define system sys-system)

(use file.util)
(define file-or-directory-modify-seconds file-mtime)

(define getenv sys-getenv)

みたいな感じかなと。

2006-09-17

勉強するよ.10

| 21:48 | 勉強するよ.10 - わだばLisperになる を含むブックマーク はてなブックマーク - 勉強するよ.10 - わだばLisperになる

Schemeの勉強.10

今日は、第10章終了。

連想リスト近辺。前回に引き続きdefstructを使用しな

いで、define-classを使ってみる。

この章は説明が少な過ぎる気が。

せめて作った関数の使用例位あっても良いのでは、とか

思う。

table-for-eachなどは使い道も良く分からず。

(define-class table ()
  ((equ :init-keyword :equ :init-value eqv?)
   (alist :init-keyword :alist :init-value '())))

(define table-get
  (lambda (tbl k . d)
    (let ((c (lassoc k (ref tbl 'alist) (ref tbl 'equ))))
      (cond (c (cdr c))
            ((pair? d) (car d))))))

;(define foo
;  (make table
;    :alist '((a . 1)(b . 2)(c . 3))))
;
;(table-get foo 'a)
;=> 1

(define table-put!
  (lambda (tbl k v)
    (let ((al (ref tbl 'alist)))
      (let ((c (lassoc k al (ref tbl 'equ))))
        (if c (set-cdr! c v)
            (set! (ref tbl 'alist) (cons (cons k v) al)))))))

;(table-put! foo 'a 33)
;
;(table-get foo 'a)
;=>33

(define table-for-each
  (lambda (tbl p)
    (for-each
     (lambda (c)
       (p (car c) (cdr c)))
     (ref tbl 'alist))))

2006-09-16

勉強するよ.9

| 18:08 | 勉強するよ.9 - わだばLisperになる を含むブックマーク はてなブックマーク - 勉強するよ.9 - わだばLisperになる

Schemeの勉強.9

今日は、第9章終了。

構造体近辺を学ぶ。自分はSchemeの処理系として、

Gaucheを使っているが、標準では、defstructがないら

しい。

ということで、

1. defstructマクロを組む。

2. 代わりの方法を探す

ってことになった。

章末には、defstructの定義も載っているが、いまいち

挙動が良く分かんない。

それで代わりの方法を探してみたら、define-classが使

えるらしい。

ということで、とりあえず、define-classで実習してみ

た。

(define-class tree ()
  ((height :init-keyword :height)
   (girth :init-keyword :girth)
   (age :init-keyword :age)
   (leaf-shape :init-keyword :leaf-shape :init-value 'frond)
   (leaf-color :init-keyword :leaf-color :init-value 'green)))

(define coconut
  (make tree
    :height 30
    :leaf-shape 'frond
    :age 5))

(ref coconut 'height)

(set! (ref coconut 'height) 40)

な感じ

勉強するよ.8

| 00:24 | 勉強するよ.8 - わだばLisperになる を含むブックマーク はてなブックマーク - 勉強するよ.8 - わだばLisperになる

Schemeの勉強.8

今日は、第8章終了。

マクロを学ぶ。やっぱりマクロの変数補足の問題とかや

やこしい。

2006-09-14

勉強するよ.7

| 00:03 | 勉強するよ.7 - わだばLisperになる を含むブックマーク はてなブックマーク - 勉強するよ.7 - わだばLisperになる

Schemeの勉強.7

今日は、第7章終了。

I/O周りを学ぶ。そんなに難しくないけど、実際に使っ

てみないと憶えられないっぽい。

2006-09-12

勉強するよ.6

| 22:08 | 勉強するよ.6 - わだばLisperになる を含むブックマーク はてなブックマーク - 勉強するよ.6 - わだばLisperになる

Schemeの勉強.6

今日は、第6章終了。

再帰、let、letrec、名前付きlet、map、for-each等を

学ぶ。

2006-09-11

勉強するよ.5

| 21:05 | 勉強するよ.5 - わだばLisperになる を含むブックマーク はてなブックマーク - 勉強するよ.5 - わだばLisperになる

Schemeの勉強.5

今日は、第5章終了。

勉強になったこと:

> 引数なしの手続き(サンクとも言う)

2006-09-10

勉強するよ.4

| 20:40 | 勉強するよ.4 - わだばLisperになる を含むブックマーク はてなブックマーク - 勉強するよ.4 - わだばLisperになる

Schemeの勉強.4

今日は、第4章終了。

2006-09-09

勉強するよ.3

| 22:04 | 勉強するよ.3 - わだばLisperになる を含むブックマーク はてなブックマーク - 勉強するよ.3 - わだばLisperになる

Schemeの勉強.3

今日は、第3章終了。

2006-09-07

勉強するよ.2

| 22:25 | 勉強するよ.2 - わだばLisperになる を含むブックマーク はてなブックマーク - 勉強するよ.2 - わだばLisperになる

Schemeの勉強.2

今日は、第2章終了。

2006-09-03

勉強するよ.1

| 14:43 | 勉強するよ.1 - わだばLisperになる を含むブックマーク はてなブックマーク - 勉強するよ.1 - わだばLisperになる

明日にでも死にたいけど、生きている限りはちゃんと勉

強したいと思う。

さあ、勉強しよう。

自分の趣味として、独習Scheme三週間ってページを課

題としてSchemeの勉強をしてみることにした。

今日は、第1章終了。