Create  Edit  Diff  トップページ  Index  Search  Changes  History  Source  RSS  wikifarm  Login

第三話「再帰に魅せられて」

概要

『プログラミングGauche』を使用した勉強会の第三回です。

  • 開催日時
    • 2008年4月2日(水) 19:30〜21:30
  • 開催場所
    • 千代田区某所
  • 教材
  • 参加者
    • 五名(前回と同じメンバー)

内容

前回の続きでリストです。今回は再帰や再帰の実際の動作など重要な箇所が多かったので声にだして輪読しました。 練習問題などを解きながら少しずつ再帰に慣れてきたんじゃないかなと思います。自在に操れるレベルに早く なりたいです。

議事録

今回の疑問

  • 再帰の動作における評価の仕方
    • 実際に#?=や#?-を使用して動作を確認した
  • 末尾再帰とそれ以外の再帰の違い
    • fold,findなど両者の例を挙げながら考察した
  • pred,condって何の略?
    • predefinition(事前定義)、condition(条件)じゃないでしょうか

中括弧

衝撃的だったんですけどGaucheって中括弧{}も使えるんですね。cond式など括弧が多くなる 場合は大括弧[]も使用できると書いてあったので、中括弧も使ってみたら使えました。調子に 乗って色々試してみました。<>とか「」とか||とか。でも結局つかえるのは大・中・小括弧 だけでした。

deep-length

deep-copy-list(ネストしたリストもコピー)が有るならdeep-length(ネストしたリストの要素数も返す) もかけるんじゃね?という疑問からdeep-lengthを作り始めました。出来たと思って試すと動作がただの copy-listだったり、直して動かしたら永久ループしてCPU使用率100%になったりとハプニングがありましたが とりあえず作ってみました。多分合ってると思います。

(define (deep-length lis)
    (cond ((null? lis) 0)
          ((pair? (car lis))
              (+ (deep-length (car lis)) (deep-length (cdr lis))))
          (else (+ 1 (deep-length (cdr lis))))))

こんな感じでどうですか?

振り返り

  • Keep
    • ホワイトボート、プロジェクターは重宝した。
    • 重要な部分での音読は効果があった。
    • 練習問題を実際に解くと理解が深まる。
    • 無線LANが使用できる会場だったので良かった。
  • Problem
    • メンバーの職場や自宅から少し遠い(移動時間のロスが大きい)。
    • Linuxの無線LANが繋がらなかった。
    • 予習をやっていなかった。
  • Try
    • mixi,Lingr,Ustreamなどで情報の公開や共有。

実際にプログラミングしながら議論すると自分が理解していなかった部分が明白になって勉強になります。 今回はリスト、特に再帰について詳しくやったのであまり進みませんでしたが、一応、第六章を終了しました。 次回は手続きに入りたいと思います。君は、刻の涙を見る。

感想・質問・意見

Last modified:2008/04/04 17:35:36
Keyword(s):
References:[勉強会過去ログ]