2015-03-03

日記

 昼に起きて大学に出かけて物理のゼミに出てきた。なんかギリギリわかるけど自分で再構成できるかやってみろって言われたらできない。要はきっちりわかっているわけではない。
 形式的にはわかる、構文的にはわかる、でも対応する事態がきちんと追跡できていない、というのはよくある話で、しかしたとえば自分が原理的に想像できないような四次元空間については、形式的な理解を意味的な理解に含めてあげないといけないように思う。うーんでも、記号が指し示す事態を自然的な記号として見出すことが常にできるわけではない、というのは当たり前の話であって、抽象概念についてその意味論的な理解をどこに求めるかと言えば、事態を頭の中でそれらしく構成して操作を加えることができるかどうか、だと思うので、やっぱり(あくまで数学的な)記号操作がわかったからと言ってそれを「理解した」の範疇に含めるのはちょっと抵抗がある。
 慣れの問題もある。とくに抽象概念については、その概念を繰り返し想起してきたかどうかで、頭が感じる抵抗感も変わってくると思う。記号的にはわかるし、操作を加えることも今まで造作なくやってきたけど、改めて捉え直してみるとゲシュタルト崩壊っぽくなる、みたいな。字に関しては特にそうだけど、これが数学的な概念に当てはまるかは一考の余地あり。
 「言葉をまっすぐに受け取ることができない」というのは対話だけではなく何らかの文章を読んだ時も同じで、私はそれについても内省を繰り返した方がよいように思える。足りないのはわかるんだけど、自分でそれを受け入れることができないというのは、やはり好ましくない態度ではなかろうか。
 あるいは主張することに対する恐怖心がある。どうせ正しくない、私は物を知らないから、どこかに間隙ができて、そこから反論が飛び出してくる、などと常に考える。正しさも知識も、自らが恣意的に決めているものだから、結局は構え方の問題なんだろうけど。

雑記 [programming, shell, make]

・makeでコンパイルする習慣をつける
競技プログラミング的な問題のためにコードをコンパイルするとき、いつも

$ g++ hoge.cpp -o hoge.out

と書いていた。.outにするのは.oだと文字数が.cppと合わないし実行ファイルだから拡張子無しってするとディレクトリと区別がつきにくいし、という理由。んで常にファイル名を一致させて.outにコンパイルするから、

$ g++ hoge.cpp

くらいで済ませてエイリアス噛ませたいとか考えたけど、便利なことにmakeというコマンドがあるから、これにファイル名を入れればOKということにする。でもパターンルールがよくわかってなくて、ぐにぐに調べて適当に書いてみた結果、

//Makefile
%: %.cpp
    g++ $^ -o $@.out

としたら、

$ make hoge

でいつも書いている冒頭のコマンドになってくれた。これからはmakeでコンパイルしようね。

・テストのためのリダイレクトを省略する
同じように、競技プログラミングのコード書くときは、テストで

$ ./hoge.out < hoge.in

なんて書いたりしてた。これも面倒なので、シェルスクリプトを書く。

//io.sh ファイル名にセンスがないし絶対他に何かと被る、iojsとか
#!/bin/sh
if [ $# -ne 1 ]; then
    echo 'only one argument: ./$1.out < $1.in'
    return 1
fi
./$1.out < $1.in
exit 0

exitとか要るんかと思うけどとりあえず書いた。実際に使うためのシェルスクリプトを書いたのは初めてかもしれない(さっぱりたいしたことを書いてないけど)。
ともかくこれで、相変わらずaliasで alias io='~/.../io.sh'みたいにして(シェルスクリプトまとめておくフォルダも作ったから忘れないように)、

$ io hoge

でやりたいことができるようになった。

広告を非表示にする