SICP Lite #5 × 第1回チキチキ もっと素人臭いSICP読書会 in Java-jaに行ってきた。

java-ja来てた??

問題1.3

問題1.3はJavaScriptSchemeで考えながら解いた。
帰宅してから解答がおおよそ浮かび、翌日の朝やっと完了。

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の有用情報まとめ

プログラミングGauche履修表

小節
第1部 予備知識 1章 LispScheme
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 GaucheR6RS

履修表(はてな記法

履修表をはてなダイアリーで使いたい方は下記をコピペして下さい。

|*部|*章|*節|*小節|*済|
|第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| | | |