2010-01-01から1年間の記事一覧

リージョンのなかの数値だけを足し合わせる関数

必要だったので作ってみた。リストの要素を足し合わせるような関数は無いはずがないと思うのだけど、探せなかったので適当に作った。 (defun my-sum-num-region (beg end) "リージョン内にある数字のみを足し合わせる" (interactive "r") (message (number-t…

全然ブログ書いていないけど、あれからちょこっとKahua触って、今はGoogleAppEngine(とPython)を触ってたりします。 Pythonがまだ期待していたほど面白くはない*1のだけど、GAEはすげーいいかも。 *1:emacsで環境がちゃんと整えられていないのと慣れの問題…

Gauche本勉強メモ(9日目)

仕事が忙しくてだいぶあいてしまったけど、今日から再開。 6.6 2種類の再帰 再帰的に呼ばれた手続きの返す値が、もとの手続きの返す値になっているものが末尾再帰。 7.1 手続きオブジェクト lambda式は評価されると手続きオブジェクトになる。今日はここまで

Gauche本勉強メモ(8日目)

ゆだんするとすぐ3日くらい空いちゃう。なるべく毎日やるぞ。リストの要素を逆転するreverseを考えてみる (define (reverse lis) (fold cons '() lis)) ;;; もしくは (define (reverse lis) (if (null? (cdr lis)) lis (append2 (reverse (cdr lis)) (list (…

Gauche本勉強メモ(7日目)

6.5簡単なリスト処理(のつづき) 2つのリストを連結する手続きappend2 (define (append2 a b) (if (pair? a) (cons (car a) (append2 (cdr a) b)) b)) gosh> (append2 '(1 2 3 4) '(10 9)) (1 2 3 4 10 9) gosh> (append2 '() '(10 9)) (10 9) gosh> (appen…

Gauche本勉強メモ(6日目)

6.5 簡単なリスト処理 空でないリストの最後の対を見つけるlast-pairを書いてみる。こんな感じだろうか? (define (last-pair2 lis) (if (pair? lis) (last-pair2 (cdr lis)) lis)) gosh> (last-pair2 '(1 2 3)) () gosh> (last-pair2 '(1 . 3)) 3 だめだ。…

Gauche本勉強メモ(5日目)

6.4 foldの定義 foldの定義を書いてみる。 自力で考えてみるか。 … 10分くらいゴニョゴニョやってみたがわからんかった。正解は (define (fold proc init lis) (if (null? lis) init (fold proc (proc (car lis) init) (cdr lis)))) まずlisが空リストの時に…

Gauche本勉強メモ(4日目)

6.3 リストの走査 fold 手続きと初期値、リストを引数にとり、初期値とリストの最初の値を手続きに渡し、その結果とリストの2番目の値を手続きに渡し、、、という処理を行う手続き。 ちょっとわかりにくい。 gosh> (fold + 0 '(1 2 3 4 5)) 15 gosh> (fold *…

Gauche本勉強メモ(3日目)

6.1 リスト データとしてのリストをプログラム中に含めたい場合は'(クォート)をリストの前に付加する。 クォートがない場合はデータではなくプログラム(なので1番目の要素は手続きである必要がある) gosh> '(1 2 3) (1 2 3) リストを連結する手続きappen…

Gauche勉強メモ(2日目)

5.1 スクリプト Gaucheのスクリプトエンジンgoshは引数にファイル名を渡すと、それをSchemeプログラムとして読み込み、中に書かれている式を順に評価する。そして、ファイルの読み込みが終了したあと、その中にmainという手続きの定義があればそれを呼び出す…

Gauche勉強メモ(1日目)

1.3 Scheme Schemeの最も基本的なルール lambda式は、「レキシカルな環境を保持した手続き」(クロージャ)へと評価される 手続き呼び出しは継続を伴った引数つきgotoである 1番目のほうは、"lambda式"という言葉はわかる。"「レキシカルな環境を保持した手…

Gaucheの勉強

去年Gauche本を買って少し読んでいたのだけど、いつのまにか放置になっていたのを再開してみようと思う。 現時点でのGauche(Scheme)を学ぶ目的は Lispのマクロを理解し使いこなせるようになること。 継続をきちんと理解すること。 Gaucheでツールやアプリ…