デザイン変えてみた

Connectはカッコいいデザインなのだが、「白地に薄青」の文字はどうにも読みにくい。そこでデザインを変えるためにテンプレートめぐり。

写真入やキャラクタなど、ファンシーからクールまで百数十種類ちかくあった。
こっちとしては「かっこよさ」より「読みやすさ」なのでシンプルなものに決定。

あとは自分のBlogに取り込んで変更を反映するだけ。
楽なものだ。

やはり緑は落ち着く。それに文字を見るには「白地に黒」のほうが見慣れてていい。
サイドバーを左だけにして項目を削っても、本文表示部の横幅が広がらなかったのは誤算だったが・・・

| | コメント (0) | トラックバック (0)

問題1.6~1.8

ファイル復元。

[問題1.6]「q1.6.txt」をダウンロード
 だめだ。問題文だけでは違いがイメージできん・・・
 またズルしてDrSchemeのDebug機能に頼る(だめだめやん)。
 ・定義ウィンドウに式を打ち込んで
 ・Debugボタンを押して
 ・REPLに(sqrt 9)と書いて
 ・あとはステップ実行
 む?good-enough?が#tを返してるのにelse-clauseに進むのはなぜ?
 (このあとelse-clauseに入り続けて無限ループ・・・またか)
 でもなんで「if」はOKで「new-if」は無限ループ?
  ・もともとschemeは「作用的順序評価」で評価されている。
   (引数から評価して得た値をその外側の手続きに突っ込む)
  ・「if」「cond」などの特殊形式は評価順序が結果に影響することがある
   ので「正規順序評価」する。(基本式まで展開してから一気に評価)
  ・「new-if」は普通の手続きなので「作用的順序評価」
   (つまり各引数の評価が先に始まる。)
  ・しかし「new-if」のelse-clauseにはsqrt-iterがいるので、その中に
   ある「new-if」の引数を評価して・・・を延々とやる
 ・・・という感じ? ということは
 「再起定義する場合は必ず正規順序評価(というか特殊形式)のお世話になる」
 ってことで。

[問題1.7]
 問題1.6のときに書いた定義(ちゃんと動くほうね)を引っ張り出してきて検証
 いちど書いた定義は「名前をつけて保存」することができる。
 呼び出すときは「~.scm」を探せばOK

 <結果>「q1.7.txt」をダウンロード
 ・(sqrt 1e-19)くらいからあやしい。0.03125から値が変わらない。
 ・(square (sqrt 1e-19))とすると0.0009765625なので、0.001以下は
  満足な結果が得られない。そりゃそうだ。good-enough?の判定閾値は0.001だもの。
 ・(sqrt 1e49)とすると無限ループ。good-enough?の判定が#tになるまで時間がかかるから?にしてはかかりすぎな気が・・・不明。
 
 <改造>「q1.7_v2.txt」をダウンロード
 ・「guessの変化が予測値に対して非常に小さい」というところをgood-enough?に
  組み込む。
  (define (good-enough? change guess)
    (< (abs (/ change guess)) 0.001))
 ・「次のguess」を用意するために内部変数next-guessをletを使って用意
  (define (sqrt-iter guess x)
    (let ((next-guess (improve guess x)))
      (if (good-enough? (- next-guess guess) guess)
          guess
          (sqrt-iter next-guess x))))
 ・いざ実行
  (sqrt 1e-250)~(sqrt 1e250)まで計算させたが暴走も頭打ちもない。

[問題1.8]「q1.8.txt」をダウンロード
 問題1.6のときに書いた定義を引っ張り出してきて作成
 ・improveを変更して、次の予測値を作る計算をテキストのとおり組み込む
  (define (improve guess x)
    (average (/ x (square guess)) guess guess))
 ・ちょっとズルいがaverageを変更して、3変数版を作る
  (define (average x y z)
    (/ (+ x y z) 3))
 ・good-enough?をguessの3乗値とxを比較するように改変
  (define (good-enough? guess x)
    (< (abs (- (cube guess) x)) 0.001))
 ・あとは3乗を計算する式を書いたり、Cubeっぽい名前に変えたり・・・
 ・いざ実行。正常に稼動している。おk。

| | コメント (0) | トラックバック (0)

やる気をくれる曲

解答書いたファイルが・・・

気を取り直して「音楽」の話題。
インターネットのおかげで、町でちょっとだけ聞いた曲でもすぐに調べがつけられる。
いい世の中だ・・・

今のお気に入りはこちら

Inner Universe (by Yoko Kanno)
Rise (by Yoko Kanno)
覚えてていいよ (by 歌い手不詳 KOTOKO)
Transparent (by Ace Combat 4 3 SoundTrack)

今でもmp3プレーヤーから無限ループで元気をもらってる。
音の力あなどるなかれ。

| | コメント (0) | トラックバック (0)

問題1.1~1.5

さてはじめますか。

[問題1.1]「q1.1.txt」をダウンロード
 単純にREPLにテキストを打ち込んで結果を見た。
 ・数値はそのまま表示
 ・式は前置記法([操作 引数セット]の順番。よく考えれば関数といっしょ)
  打ち込んでリターンすれば演算結果が返る。
 ・積和演算とかは入れ子で表記。
 ・defineで定義するだけではREPLから返答はない。(DrSchemeだから?)
  いちど定義を書けばそれ以降継続して使える。
 ・条件式も書けるが演算と見間違えて困る(これは当方の問題^^;)
 ・ifやcondどうしても括弧満載の式になるのでどうにも読みにくい。
  エディタに自動インデントと括弧の範囲表示機能がないとSchemeいじりが
  おっくうになるのもわかる。
  (というかScheme/Lisp処理系は専用エディタとセットメニューが必須だと思う。)

[問題1.2]「q1.2.txt」をダウンロード
 REPLにテキストを打ち込んで結果を見た。
 ・検算するとうまくいっているようなので、よしとしよう^^;;;
 ・分数表記できるのが「人として」はうれしいところ。
  逆に少数ほしいときは厄介?

[問題1.3]「q1.3.txt」をダウンロード
 DrSchemeの定義ウィンドウをはじめて使う。
 ・定義ウィンドウに定義式を書くとREPLで呼び出して使えるらしい。
 ・defineはC言語のように1つずつ並べて書いてもよいけど、Schemeらしさを味わう
  ためにdefine内部でdefineを書いてみた。
 ・構成は
  1.「2乗の和」の定義を書いて
  2.「一方が他方より大きいまたは等しいか?」の定義を書いて
  3.condを使って引数の大小を判定し、これに応じて計算方法を決める。
  といった感じで
 ・引数名の衝突を避けるためにdefine内部の関数引数はdefineで使った引数と違う
  文字を使ったが、同じでもOKらしい。(ぶつからないのねん。)
  「q1.3_v2.txt」をダウンロード

[問題1.4]「q1.4.txt」をダウンロード
 「演算式が合成式である組合せ」とは何ぞや?
 (+ 1 1)とかじゃなく((+ - * /) 5 6)みたいなイメージか?
 とすると問題にある手続きは「引数の値によって演算方法を変える」ってところか?
 絶対値計算とかに使えると便利だな。

[問題1.5]
 ズルしてDrSchemeだのみ。
 定義ウィンドウに式を打ち込んでREPLで実行。あり?返事がない・・・
 というか暴走!?
  ・作用的順序評価は「引数を評価し作用させる」から(define (p) (p))の引数展開
   の段で無限にp→p変換を行って暴走するのか。
  ・正規順序評価は「式を完全に展開し簡約する」からifの中身が
   (if (= 0 0) 0 (p))となって、めでたく0が帰ってくる・・・わけか?
 なるへそ。

| | コメント (0) | トラックバック (0)

そろそろ本題へ

ブログにも慣れてきたので、本題に取り掛かります。
タイトルにもあるとおり、当方がブログをはじめたのはブログを使って「Schemeの独学記録を書こう」と思ったからです。
(「寄り合い」という手段もあるのですが、京都って関東と違って勉強会の情報が少なくて・・・まぁあったとしてもついていけるのか心配ですが・・・)
これからSchemeについて身につけたことを順次UPしていきます。

まずは教科書。当方は「SICP」をつかっていきます。Schemeの超人気教材なうえにプログラミングの新しい考え方をくれた良書だからです。
あとは「ANSI Common Lisp」も手が出せれば御の字。こっちは余裕を見てから。

つぎに環境。これも「DrScheme」をチョイス。MIT-Schemeもよいが、へたれWinユーザだけに「実行環境のわずらわしさではまるのは致命傷」と判断し断念。これも余裕を見てから。

進め方は練習問題を解いていくオーソドックスな形式で。1日1題ノルマで解けるだけ解く感じでいく。途中で寄り道とか実験とかできるとなおたのし。

課題はココログにあのカッコ&インデントばりばりのコードをきれいに乗っけられるかどうか。これは次までの宿題で・・・
(といいつつ本日のノルマは先送りというずるい私^^;;;)

課題:ココログにschemeコードをきれいに乗っける方法を探す

| | コメント (0) | トラックバック (0)

あきらめていた出会い

ちょうど1年前に漫画やさんでかかっていた曲にひと目で(ひと聴きで)ほれてしまい、店員に「あの曲は何?」と問い合わせたことがあった。

店員もわからず、当方も1ヶ月ほど調べて見つからず、あきらめていたのだが、つい先日ひょんなことからその曲を見つけた。

”BERSERK -Forces-”  by Susumu Hirasawa

早速取り込んで聞き三昧。今でも・・・よい曲だ。

| | コメント (0) | トラックバック (0)

はじめまして

はじめまして。Wackyと申します。

(Penaltyさんじゃないよ)

こんごともよろしく。

| | コメント (0) | トラックバック (0)