SICP Lite #5 × 第1回チキチキ もっと素人臭いSICP読書会 in Java-jaに行ってきた。
java-ja来てた??
問題1.3
問題1.3はJavaScriptとSchemeで考えながら解いた。
帰宅してから解答がおおよそ浮かび、翌日の朝やっと完了。
Gauche
(define (proc1 a b c) (if (and (<= a b)(<= a c)) (+ (proc2 b)(proc2 c)) (proc1 b c a))) (define (proc2 x) (* x x)) (print (proc1 1 2 3)) ;=>13 (print (proc1 2 4 3)) ;=>25 (print (proc1 5 4 3)) ;=>41 (print (proc1 1 1 1)) ;=>2
JavaScript
- defineはvarで宣言した変数に束縛する。function宣言だと書いてみたけどないわー。
- 原則returnで返す。
var proc1 = function(a,b,c){ if(a <= b && a <= c){ return proc2(b) + proc2(c); } return proc1(b,c,a); }; var proc2 = function(x){ return x * x; }; alert(proc1(1,2,3)); //=>13 alert(proc1(2,4,3)); //=>25 alert(proc1(5,4,3)); //=>41 alert(proc1(1,1,1)); //=>2
Gaucheでユニットテスト。
TDDを求めるエンジニアが多いので、gaucheでのユニットテスト例。
;;テスト対象 (define (proc1 a b c) (if (and (<= a b)(<= a c)) (+ (proc2 b)(proc2 c)) (proc1 b c a))) (define (proc2 x) (* x x)) #| 以下ユニットテスト例。 |# ;;テストモジュールを読み込む (use gauche.test) ;;テストをスタート (test-start "proc1 test") ;;テスト群の名前付け。 (test-section "test group 1") ;;テスト項目 (test* "proc1 13" 13 (proc1 1 2 3)) (test* "proc1 25" 25 (proc1 2 4 3)) (test* "proc1 41" 41 (proc1 5 4 3)) (test* "proc1 2" 2 (proc1 1 1 1)) ;;テストの終了 (test-end)
実行結果
Testing proc1 test ... <test group 1>----------------------------------------------------------------- test proc1 13, expects 13 ==> ok test proc1 25, expects 25 ==> ok test proc1 41, expects 41 ==> ok test proc1 2, expects 2 ==> ok passed.
Gaucheについてまとめた記事
プログラミングGauche履修表
部 | 章 | 節 | 小節 | 済 |
---|---|---|---|---|
第1部 予備知識 | 1章 LispとScheme | ○ | ||
2章 Gaucheの特徴 | ○ | |||
3章 Gaucheの設計思想や誕生の背景 | ○ | |||
第2部 Gaucheの基礎練習 | 4章 Gaucheの開発スタイル | ○ | ||
5章 プログラムの書式 | ○ | |||
6章 リスト | ○ | |||
7章 手続き | △ | |||
8章 真偽値と条件判断 | ○ | |||
9章 状態の管理 | ||||
10章 テストと例外処理 | ||||
11章 評価モデル | ||||
第3部 実用的なプログラミング | 12章 数値 | ○ | ||
13章 文字と文字列の処理 | ○ | |||
14章 入出力 | ○ | |||
15章 テキストの構築 | ○ | |||
16章 さまざまなデータ構造 | ||||
17章 総称関数とオブジェクト | ||||
18章 構文の拡張 | ||||
19章 継続 | ||||
20章 モジュールシステム | ○ | |||
21章 デバッグ | ||||
22章 データベース | ○ | |||
23章 日付と時間 | ||||
第4部 Webアプリケーションへの応用 | 24章 GaucheでCGIスクリプトを書いてみる | ○ | ||
25章 スケジュール管理アプリケーション | △ | |||
26章 継続渡しによるWebアプリケーション | ○ | |||
27章 Kahuaアプリケーションを書こう | △ | |||
付録A | Gaucheインストール | ○ | ||
付録B | Emacsの設定 | ○ | ||
付録C | Kahuaインストール | ○ | ||
付録D | GaucheとR6RS | ○ |
履修表(はてな記法)
履修表をはてなダイアリーで使いたい方は下記をコピペして下さい。
|*部|*章|*節|*小節|*済| |第1部 予備知識|1章 LispとScheme| | | | | |2章 Gaucheの特徴| | | | | |3章 Gaucheの設計思想や誕生の背景| | | | |第2部 Gaucheの基礎練習|4章 Gaucheの開発スタイル| | | | | |5章 プログラムの書式| | | | | |6章 リスト| | | | | |7章 手続き| | | | | |8章 真偽値と条件判断| | | | | |9章 状態の管理| | | | | |10章 テストと例外処理| | | | | |11章 評価モデル| | | | |第3部 実用的なプログラミング|12章 数値| | | | | |13章 文字と文字列の処理| | | | | |14章 入出力| | | | | |15章 テキストの構築| | | | | |16章 さまざまなデータ構造| | | | | |17章 総称関数とオブジェクト| | | | | |18章 構文の拡張| | | | | |19章 継続| | | | | |20章 モジュールシステム| | | | | |21章 デバッグ| | | | | |22章 データベース| | | | | |23章 日付と時間| | | | |第4部 Webアプリケーションへの応用|24章 GaucheでCGIスクリプトを書いてみる| | | | | |25章 スケジュール管理アプリケーション| | | | | |26章 継続渡しによるWebアプリケーション| | | | | |27章 Kahuaアプリケーションを書こう| | | | |付録A|Gaucheインストール| | | | |付録B|Emacsの設定| | | | |付録C|Kahuaインストール| | | | |付録D|GaucheとR6RS| | | |