タグ

セルクマとschemeに関するpycolのブックマーク (10)

  • Schemeに挑戦番外編 計算機プログラムの構造と解釈: ぼくのブログ

    Schemeに挑戦して、早2週間。 こちらのページを参考にしてやってきました。 http://www.shido.info/lisp/idx_scm.html でも、高階位関数の部分で、もう何がなんだかわからなくなってしまいました。 ということで、が欲しいと思ったので、ところどころで話題になる「計算機プログラムの構造と解釈」を購入しました。 たまたま近くの屋で売っていたので、ちょっと高かった(4600円+税)ですが、即購入しました。中も開けずに。 家に帰って空けてみたら、思った以上に字がびっしりでビックリしました。 眺めてるだけで頭がよくなりそうです。 文章は、英文を直訳した感じで非常に難解です。 最近の小説とかに慣れてしまっていると、序文で挫折しかねません。 でも、例えや表現がとてもわかりやすい。 まだ10ページぐらいしか読んでませんが、木構造の図とかまさに入門用の表現だと思いました

  • Schemeに挑戦9 関数その3定義の省略: ぼくのブログ

    関数の定義を省略することができます。 例えば、 (define tashizan (lambda (x y) (+ x y))) のように定義した関数があるとします。 これは、xとyの二つの入力を単純に足し算する関数ですが、これは次のように省略できます。 (define (tashizan x y) (+ x y)) この二つは、書き方が違いますが、同じ働きをする関数です。 (define (関数名 引数1 引数2…) (処理)) という形になります。

  • Schemeに挑戦8 関数その2引数: ぼくのブログ

    関数には引数がつきものです。 Schemeでも、引数はしてできます。 書き方は、 (define 関数名 (lambda (引数) (処理)) という形になります。 例えば、 (define tashizan (lambda (x y) (+ x y))) と記述すると、関数のtashizanが定義されます。その説明が、lambdaの部分に書いてあります。 引数が、xとyの二つが定義されています。 後ろの部分で、xとyが足し算するように設定されているので、xとyが足し算をされて、出力されます。 MIT/GNU Schemeでは、上のプログラムを入力して実行した後に、 (tashizan 3 5) と入力して、実行します。 tashizanという関数に、引数を指定しています。 3がxに、5がyに入って、実行されます。 引数には、任意の数を指定することもできます。 書き方は、lambdaの部分

  • Schemeに挑戦7 関数その1定義: ぼくのブログ

    Schemeでは、関数を定義するのにもdefineを使います。 変数の定義と違うのは、関数はどのような挙動をするかも定義しなくてはいけないというところです。 その挙動を定義するのに、lambdaを使用します。 defineとlambdaを使用して、関数を定義します。 例えば、 (define helloworld (lambda () "Hello World!")) を実行します。 そして、(helloworld)を実行すると、"Hello World!"と表示されます。 流れとしては、defineで「helloworld」という箱を定義します。 その箱の挙動が、lambdaの中に書かれていて、 空の()は引数を、""の部分が実際の挙動を示しています。

  • Schemeに挑戦6 変数の定義: ぼくのブログ

    Schemeでは変数を宣言するのに、defineを使います。 書き方は、 (define 変数の名前 値) という形です。ちょっとわかりにくくてすみません。 例えば、 (define name "suzuki") と書くと、nameを呼び出した時に、suzukiと返ってきます。 nameという箱の中に、suzukiが入ってるようなイメージかもしれません。 上の例(define name "suzuki")を実行すると、結果は、"suzuki" になります。

  • Schemeに挑戦5 リスト: ぼくのブログ

    Schemeには、リストがあります。 配列みたいなものでしょうか。 書き方は、 (list 要素1 要素2 要素3 ・・・) となります。 要素の数はいくつでも大丈夫です。 例えば、 (list 1 2 3 4 5) とすると、結果は、 (1 2 3 4 5) となります。

  • Schemeに挑戦4 コンスセル: ぼくのブログ

    Schemeは、Lisp系なので、リストの操作が上手なのだそうです。 リストの詳細は、こちらを。 3. リストを作ろう http://www.shido.info/lisp/scheme3.html リストの構成要素にコンスセルというものがあります。 コンスセルは、car部とcdr部の二つのアドレスを格納した、メモリ領域です。 コンスセルは、(cons 要素1 要素2)という形で指定します。 例えば、 (cons 1 2) と、指定すると、car部に1、cdr部に2が入ります。 コンスセルは、数珠繋ぎに使うことが出来ます。 例えば、 (cons 1 (cons 2 (cons 3 4))) というように指定できます。 こうすると、 最初のメモリ領域にcar部に1が入ります。 cdr部には次のメモリ領域のアドレスが入ります。 次のメモリ領域のcar部に2が入って、 cdr部に次のメモリ領域の

  • Schemeに挑戦3 簡単な文法と計算: ぼくのブログ

    今までPHPとかをちょっとだけ知ってた私ですが、Schemeの書き方はPHPと全然違うなぁと感じました。 Schemeでは、()がたくさん使われます。 その()が一つの塊になっていて、処理は()ごとに行われます。 (命令 引数1 引数2 引数3・・・・) というような形です。 計算もその()を基準に行われます。 例えば、1+1の結果を表示するときは、 PHPだと、 a = 1 + 1; echo a; というような書き方です。 でも、Schemeだと、 (+ 1 1) という式になります。 引数を増やすこともできます。 (+ 1 2 3 4 5 6) とすると、中が全部足されて、 ;Value: 21 と表示されます。 他の演算も同様です。 引き算 (- 3 2) 掛け算 (* 1 1) 割り算 (/ 3 3) 引き算や割り算は左から計算されていきます。 また、分数も使えます。 (11 /

  • Schemeに挑戦2 インストールと最初の実行: ぼくのブログ

    このサイトを参考に、処理系のインストールをしてみました。 もうひとつの Scheme 入門 http://www.shido.info/lisp/idx_scm.html MIT-GNU Schemeをここからダウンロードしてきます。(英語) http://www.gnu.org/software/mit-scheme/ 選んだのは、Windows binaryです。Windowsなので。 インストールは特に問題も無く終わりました。 そして、インストールしたMIT-GNU Schemeを起動すると、ウィンドウが二つ出てきます。 「MIT-GNU Scheme」と、「Edwin: *scheme*」の二つの窓です。 この辺で、参考にしたサイトと微妙に違うのでちょっとあせりました。 入力できるのは、「Edwin: *scheme*」の方なので、こちらに命令を入力するんだ、というところまではわか

  • Schemeに挑戦1 挑戦する理由: ぼくのブログ

    私は、趣味PHPをいじる事があります。でも、基礎的な事しかわからず、PHPについて理解できてないなぁと感じました。 そこで、プログラムについて、ちゃんと勉強しようと思って、Schemeという言語に挑戦しようと思いました。 Schemeとは、関数型のプログラミング言語で、Lisp系のものらしいです。 アメリカの大学で、プログラミングの授業によく使われるらしいです。 http://ja.wikipedia.org/wiki/Scheme 詳細はwikipediaをどうぞ。 なぜ、Schemeに興味を持ったかというと、偉大なプログラマーである小飼さんが、コンピュータを学ぶにはSchemeがいいよ、とブログで言っていたからです。それだけです。 私の言語遅延学習法 - 三つのルール+1 http://blog.livedoor.jp/dankogai/archives/50999338.html

  • 1