タグ

the little schemerに関するh6nのブックマーク (23)

  • Scheme 手習い 8 章 (2) - yamanetoshi's diary

    思いだした。リストの場合の継続がイメージできていないのでした。 ええとリストなので car を処理して継続の中でも cdr について evens-only*&co しないといけないのか。んでそれに渡す継続が、、なのか。 これって以下を机上で確認した方が良いのかな。 (evens-only*&co '((9 1 2 8) 3 10 ((9 9) 7 6) 2) (lambda (newl product sum) (cons sum (cons product newl))))car がリストなので以下? (evens-only*&co '(9 1 2 8) (lambda (al ap as) (evens-only*&co '(3 10 ((9 9) 7 6) 2) (lambda (dl dp ds) ((lambda (n p s) (cons s (cons p n))) (con

    Scheme 手習い 8 章 (2) - yamanetoshi's diary
  • Scheme 手習い 8 章 - yamanetoshi's diary

    エントリ投入の報せが入った。 Scheme手習い Chapter 8 とりあえず git pull して $ git pull remote: Counting objects: 138, done. remote: Compressing objects: 100% (57/57), done. remote: Total 136 (delta 89), reused 126 (delta 79) Receiving objects: 100% (136/136), 13.60 KiB, done. Resolving deltas: 100% (89/89), completed with 2 local objects. From git://github.com/hanachin/TheLittleSchemer dfb5e59..9c5b266 master -> origin/

    Scheme 手習い 8 章 - yamanetoshi's diary
  • Scheme 手習い 10 章 (2) - /var/log/messages

    そういえば、ということで git fetch してみた。 $ git fetch remote: Counting objects: 119, done. remote: Compressing objects: 100% (49/49), done. remote: Total 117 (delta 76), reused 108 (delta 67) Receiving objects: 100% (117/117), 11.02 KiB | 7 KiB/s, done. Resolving deltas: 100% (76/76), completed with 2 local objects. From git://github.com/hanachin/TheLittleSchemer b5c9960..3fba462 master -> origin/master $あら、10

    Scheme 手習い 10 章 (2) - /var/log/messages
  • Scheme 手習い 10 章 - yamanetoshi's diary

    出ました。metacircular evaluator です。 リストのペアである_エントリ (entry)_が出てきた後に lookup な手続きだったり extend な手続きだったりして、環境を云々することを前提にしているのが分かります。 次に S 式の type と value は何か、という問答が続きます。そして式の型は 6 つあるとのこと。 const quote identifier lambda cond application atom-to-action は特殊形式と identifier を判別しているのかどうか。そしてアクションは式と環境の二つの引数を取るとのこと。 あ、ここでは_特殊形式_という言いかたではなくて_基関数_というものになっているようですね。lambda な手続きオブジェクトがどこまで説明されているのか。 そして ざっくり読みです。Scheme手習

    Scheme 手習い 10 章 - yamanetoshi's diary
  • Scheme 手習い 9 章 (2) - yamanetoshi's diary

    p.169 の (((lambda (mk-length) (mk-length mk-length)) (lambda (mk-length) (lambda (l) (cond ((null? l) 0) (else (add 1 ((mk-length eternity) (cdr l)))))))) l)を展開してみます。l は (apples) とのこと。 eternity って何だろ。なんてことはとりあえず気にせず展開してみます。 ええと (lambda (mk-length) (mklength mklength))な手続きオブジェクトに (lambda (mk-length) (lambda (l) (cond ((null? l) 0) (else (add 1 ((mk-length eternity) (cdr l)))))))な手続きを戻す手続きオブジェクトが渡され

    Scheme 手習い 9 章 (2) - yamanetoshi's diary
  • Scheme 手習い 9 章 - yamanetoshi's diary

    9 章で終わりかと思ったらそうでもない模様。 Scheme手習い Chapter 9 全関数、部分関数という用語ははじめて見たのですが、再帰しつつ引数なリストが小さくならない (null? で終わらない) というソレは初めて見ました的実装でした。 この章、全関数やら部分関数から始まって will-stop? という正確に記述できるけど実装できないという驚きの手続きが出てきます。 そして Y-conbinator が出てくるのですが、git://github.com/hanachin/TheLittleSchemer.git を clone して y.scm がテキストのトレイスになってます。 ちょっと今日は無理なのですが、p.169 の (((lambda (mk-length) (mk-length mk-length)) (lambda (mk-length) (lambda (l)

    Scheme 手習い 9 章 - yamanetoshi's diary
  • http://atnd.org/events/17487

    http://atnd.org/events/17487
    h6n
    h6n 2011/07/19
    こんなのあったのか… 気になる。
  • 計算可能関数 - Wikipedia

    計算可能関数(けいさんかのうかんすう、英: Computable function)は、計算可能性理論研究の基的な目的で、直観的には、アルゴリズムによって結果の値が得られる関数のことである。計算可能関数は、チューリングマシンやレジスタマシンといった具体的な計算モデルを参照せずに、計算可能性を論じるのに使われる。しかし、その定義には特定の計算モデルを参照する必要がある。 計算可能関数の正確な定義が与えられる以前から、数学者は effectively computable(実効的に計算可能)という言い回しをよく使っていた。現在では、その概念が計算可能関数となっている。effective(実効的)であってもefficient(効率的)に計算できるということは導かない。実際、計算可能関数には非効率な場合もある。計算複雑性理論は、そのような関数の計算効率を研究している。 チャーチ=チューリングのテ

  • Scheme手習い Chapter 7 - はなちん C-x C-c

    気付きとか 集合の例として出ているものについて(p.113) (apple peaches apple plum)や(apples peaches pears plums)などリストの中の要素に複数形のものがある。 set?がどんな関数か考えさせるために複数形の名詞を入れてるのかなぁ(複数形の名詞だからといってsetなわけではないみたいな) eq?をequal?使って書き直したっけ? p.113とp.115でmember?とかmultirember?の定義をequal?使って書き直したって記述があるんだけど記憶になかった orz makesetのテストケースについて 最初のmakesetの定義だと結果はp.114の最初の質問の答え(apple peach pear plum lemon)と同じ結果にならない。 最初のmakesetの定義だと結果はp.114の最後の質問の答え(pear pl

    Scheme手習い Chapter 7 - はなちん C-x C-c
  • Scheme 手習い 7 章 - /var/log/messages

    今日は linaro な kernel をだらだら見ようかな、って思っていたら @hanachin_ の中のヒトからエントリ投入の報せが入った。 Scheme手習い Chapter 7 そろそろ真面目にヤらないとシャレにならないはずなので真面目に確認着手。 とりあえず git pull して diff 見てみるか。いっちゃんてっぺんの commit が dfb5e59f でこの章の最初の commit が 13d42219 で良いのかな。ちがうのかな。その前から、という形でないと駄目なのかな。377c3253 でヤッてみれば良いのか。 makeset 最初の makeset は gosh> (define lat '(apple peach pear peach plum apple lemon peach)) gosh> (makeset lat)(pear plum apple lem

    Scheme 手習い 7 章 - /var/log/messages
  • Y combinator - コードの恵み

    Y combinator について分かった(気がする)範囲のメモ 『Scheme 手習い』 9章 この章が難しくて悩んでいたのだけど理由が分かった。 Learning Programming Languages with Koans によると*1『Scheme 手習い』は Koan の元になっているようだ。 各章はあるテーマに沿った演習を行っているのだが Koan と違って『Scheme手習い』では何の演習をしているのかぼかして記述してある。9章では何の演習を行っているか?と考えてみると再帰や lambda だ。 演習を行うために Y combinator を用いているだけなのにそれを理解しようとしていたのが間違いだった。6章の最後と同じでおそらく友情出演みたいなものだろう。 lambda を操作する理由を考えてしまうと分からなくなるが、操作自体はついていける。 関数名がないので再帰関数を

    Y combinator - コードの恵み
  • SETT January 2011 - Learning Programming Languages with Koans

    Learning Programming Languages with Koans by Mario Aquino, Principal Software Engineer Object Computing, Inc. (OCI) The idea of learning by starting with very basic concepts and building on them is not new. In the 1960s and 70s, the state-of-the-art in computer programming was defined by two predominant programming paradigms: procedural (imperative) style (of which Fortran was the most widely used

  • Scheme 手習い 5 章 - yamanetoshi's diary

    読みました、なエントリが投入された旨の連絡が着信。エントリは以下。 http://d.hatena.ne.jp/h6n/20110516/1305573154 引数のどれかが考慮されない エントリの_感想_にも p91の注に出てくる話(andもorもcondの省略形として書く事は出来る)がちょっと発想の転換な気がして面白かった。 という記述がありますが、これ確かに興味深い。 ってか、91p にある以下の記述 (and ...) は最初の引数が値 #f なら止まりますし、(or ...) は最初の引数が値 #t なら止まりますから というソレは例えば (and #f (let ((x (+ 1 2 3))) x))みたいな式があったら let なナニは評価されない、ということなのかな。そーゆー意味では cond 式についても全ての引数が評価される保証はないのか。 でも、_定義 (define

    Scheme 手習い 5 章 - yamanetoshi's diary
  • Scheme手習い Chapter 5 - はなちん C-x C-c

    3でlatの再帰、4で数の再帰、5はリストの再帰。 ここで第1の戒律、第4の戒律が最終版に。アトムのリストlatの場合、数nの場合、S式のリストの場合の再帰の掟が決まる。 *関数は'(), (cons a l), (cons l l)のいずれかの上で動くから、3つ質問をする。 equal?を定義した equal?を使って任意のS式とリストを取るremberに書き直した 第6の掟「関数が正しいときのみ簡素化せよ。」が登場。 書いてて今までの章よりも関数のcondが多かった印象。 eqan?以外の関数の中のeq?や=に関してはequal?で一般化出来る。 気付き感想 最初はアトムから始まり、cons、lat・数・リストの再帰と来てなんだか少しずつ扱えるデータが増えてきたような。 それに伴ってeq?, =, eqan?, equal?とより多くのデータを扱える関数を使ってremberを定義しなお

    Scheme手習い Chapter 5 - はなちん C-x C-c
  • Scheme 手習い 4 章 - yamanetoshi's diary

    読みました、なエントリが投入された旨、連絡が入った。 http://d.hatena.ne.jp/h6n/20110508 ええと、github なリポジトリから git pull して中身を見てみる。ちなみに github なナニは git://github.com/hanachin/TheLittleSchemer.git です。 4 章の試験な手続きの一部が以下。 (use gauche.test) (add-load-path ".") (load "func") (load "test-util") (test-start "chapter 4") (test-section "atom?") (eqt (atom? 14) #t) (test-section "number?") (eqt (number? -3) #t) (eqt (number? 3.1415) #t) (

    Scheme 手習い 4 章 - yamanetoshi's diary
  • Scheme手習い Chapter 4 - はなちん C-x C-c

    Chapter 3までは主にリストを再帰させてたけど今度は数の再帰。 自分の中でのまとめ リストの時はリストが空かどうかを判定し再帰を終わらせるためにnull?を最初に質問したが、数で再帰する場合は再帰を終わらせるためzero?でゼロかどうか質問する。第5の戒律はわかりやすい。数で再帰する場合、再帰の終わりでは今までの計算を変えないような値を返し、リストで再帰する時はリストの終端nilを返す。number?は基関数。add1 sub1 zero? car cdr cons null eq? atom?も基関数。 気をつけた事 +, -, *, /, <, >, =はoを付けo+, o-, o*, o/, o<, o>と書いた。exptはo-exptと、o-を付けた。でもlengthはo-付けずにそのまま書いた。 「はじめに」p.xiiiを見るとsub1とadd1がないので組込み関数+と

    Scheme手習い Chapter 4 - はなちん C-x C-c
  • マクロ云々 - yamanetoshi's diary

    というエントリを入れたら TB が来た。 テストの件 現状では以下なカンジになっているらしい。 (define-syntax f-test (syntax-rules (=>) ((_ (f (=> a args ...) ...) ...) (let-syntax ((eqt (syntax-rules () ((_ expr expected) (test* (quote expr) expected expr))))) (begin (test-section (symbol->string (quote f))) (eqt (f args ...) a) ...) ...)) ((_ (f (args rest ...) ...) ...) (begin (f-test (f (rest ... args) ...)) ...))))で試験なコードが以下。 (test-start

    マクロ云々 - yamanetoshi's diary
  • gauche.test の件 - yamanetoshi's diary

    shiro さんからコメント頂いた。ありがとうございます。曰く、 testのnameについてはどっかで書いたような気がしてたんですが、今見たらマニュアルには書いてませんでしたね。基、後から照合できるなら何でも良いかと思います。 マクロなんだからテストすべき式をそのまま表示したらどうか、という意見もあるのですが、gauche.testではtest*をだらだら並べる形式よりも、「組み合わせを総当たりするような手続きを書いて漏れなくテストする」という方向を推奨したいという考えがあります。例えば ext/charconv/test.scm など。そうした場合、test*の引数そのものを表示してもほとんど意味がないので。 今回の例なら手軽には (define (test-rember a lat expect) (test* (format "rember ~s ~s" a lat) expect

    gauche.test の件 - yamanetoshi's diary
  • Scheme 手習い 3 章 - yamanetoshi's diary

    投入の報せが入った。 Scheme手習い Chapter 3 疑問点や引っかかった事について test の name のとこどうしよう、の件 これは何とも言えないなぁ。以下な出力はドキュメントという意味でも大切なので <rember>----------------------------------------------------------------------- test (rember 'mint '(lamb chops and mint jelly)), expects (lamb chops and jelly) ==> ok test (rember 'mint '(lamb chops and mint flavored mint jelly)), expects (lamb chops and flavored mint jelly) ==> ok test (r

    Scheme 手習い 3 章 - yamanetoshi's diary
  • Scheme手習い Chapter 3

    GW入ったのもあって早速進めようかと。 とりあえず読んでの感想的な remberは「remove a member」 p23第1の戒律 (仮)いかなる関数を表現するときも最初の質問はすべてnull?にすべし p35の定義だとmemberが見つかる前のアトムがすべて失なわれてしまう。 そこで偉大なるConsの出番! (p37第2の戒律 リストを作るにはconsを用いるべし。) condのelseにcondを書いてるのは簡素化出来る。 firsts p46第3の戒律 リストを作らんとせしときは、最初の要素になるものを記述し、しかる後にそれを自然なる再帰にconsすべし。 (else (cons (car (car l)) (firsts (cdr l)))の(car (car l))が要素になるもの、(firsts (cdr l))が自然な再帰。 自然なる再帰にconsするためには、自然なる再