今日はScheme演習の日, 第6回課題は問7を除いて完成済み, ついでに提出期限も2月なのでものすごく余裕…と思っていたのにぃぃ, TAは何とC演習の教官同伴で登場, いきなりC演習の課題増加の告知から始まったりしちゃったのである
何でもダイクストラDijkstraのアルゴリズムだけでは彼は飽き足らないらしく, 新にAで始まるファイル名全体…ではなくて単純に『エースター』という名前, 多分阪神の某選手ではないA*法の実装もやらなければならなくなったのだ
確かにアルゴリズムは大して変わらないので今から入れることもそう難しい話ではないのだが, 殆ど完成状態にまでしたいままでの苦労は何? そもそもA*なんて教科書にも全く無いじゃないの…と少しヒステリー気味になってみる
取り敢えず面倒そうなA*は放っておいてSchemeの問7にかかる
これは『といっても殆どはTAの方が最初から用意, 後は色々修正していくだけ自作したScheme上で動くScheme-Interpreter上でそのInterpreter本体を動かす』というもの
取り敢えず言いたい, これ, かなりヘビィです
eval-let*やeval-mapをノーヒントで作るのは括弧の多さに混乱 & 消化不良気味…何とかなったとしても, cddrみたいな関数に対応していないというのはちょっときつい… 原因不明のバグがむしろ困る, Interpreterなので嘘があってもある程度までは許容してしまうのだ, ついでに殆どがλ-Closureなので実行時に判定…滝のように流れてこない…
InterpreterがInterpreterを読み込むのはちょっとお預けのようです
GNUのコマンドラインの最初から引数のワイルドカードはOS側で展開されるそうです仕様を教えてくださったKaicho-さん, どうもありがとうございました
このページは実は彼によく撃墜されているような…
今日は帰りも遅かったし螺旋鑑賞もしたのでDijkstraの連続使用ができるように改造して終わらせた
ついでにメッシュ番号とメッシュ内連番の組でもノードを指定できるように機能追加をしてみた
それに伴って出力の方も多少修正して大いに疑問見やすくしてみたつもり, 無限ループ化したのでキーボードからも終了できるようにした…って結構いろいろやっているなぁ…
ところでいい加減な抜粋, データ型は適当に判断して下さい, 要するにハイフンでつながれた数値の読み取りです, でもって文字色が何故か変です(笑)こんなコードは邪道ですか?
if (入力は『m12345-67』みたいなものを想定(桁数自由)buf[0] == 'm') { int i; 数字が来なくなるところまでループ, 文末には密かにSemicolonが…, 因みにASCIIコード系を仮定for (i = 1; buf[i] >= '0' && buf[i] <= '9'; i++); if (因みにこれはtypedef char * string;としたstring型(←VBプログラマの性?)buf[i] == '-') { int id; typedef struct mesh mesh;などとやっていたりする…mesh m; 文字列のspritをこのような姑息な方法でやっている…buf[i] = '\0'; m.mesh = atoi(所謂ポインタの足し算, 結局はbufの先頭文字以外を評価buf + 1); m.node = このような方法はVBでは取れない…というより取らないatoi(buf + i + 1); id = ID変換実行関数, 失敗したなら-1を返すように設計getid(m, 配列インデックスとメッシュ番号等を関連付けている『2-3木』(←何故そっちに走った…)d->ttn); if (id != -1) { fprintf(stderr, "ID %d が選択されました\n", id); return id; } else fprintf(stderr, "該当するノードは存在しませんでした\n"); } else fprintf(stderr, "構文を正しく解釈できませんでした\n"); }
ついでにこのコードを出すためだけにCGIをスペースをそのまま出力してくれる, 改行もそのままなので<br>は付加しないように変更<pre>に対応させたのも邪道ですか?
コード中に日記コメントを入れるぐらいならCのコメントを入れるべきだったかと少し反省…
これを書いていて今更, Stderrの保存法について, &>等を利用(だったはず)以前にKaicho-氏がくれたAdviceは存在を忘れていた…日記内のコメント文字に対してのものだったと…申し訳ないです
Comments (0):