Home > Archives > 2010年07月21日

2010年07月21日

wake で(ry

eval を使うようにしてみた.

char pyramid.eval 使って空白入れられるのね.

:$<
~:" "
([^ ]+)([^ ].*):$1$(~)$2
(.*)%:"$1\n"
( *)[^ ](.*):$1$2$(~) $&%
 +:

palindromize.eval を使うと評価位置を限定できるのでプログラムがすっきりする.

-:$<
(.*)#.?\1(.*):"$2"
(.)(.*#)(.*):$2$1$3
:
([^\n]+)(\n(.*))?:"$1$($1#)\n"$3

とりあえず,空白入れたり評価位置を特定するのにevalを使うということは理解した.

wake で遊び続けている

なんか大昔に Makefile だけで n回Hello, world! をやった時を思い出すなぁ(make から呼べるコマンドは echo と make のみという縛りで,コマンドライン引数に n が指定される).

char pyramid.右辺で空白入りのトークンをどうやって作ればいいかわからず,とりあえずチルダをセパレータにしておいて最後に空白化している.無駄だ…

-:$<
([^~]+)([^~].*):$1~$2
(~*)[^~%]([^%]*):$1$2~ $&%
~+:
~(.*%):" "$1
(.)(.*%):"$1"$2
%:"\n"

Permutations.昨日のと同じ.これも最後の空白挿入の操作がお馬鹿なのでどうにかしたい.

:!012345%
(.*)(!.*)(.)%(.*):$1$2%$3$4 $1$3$2$4%
.*!%.+:
(.)(.+!%):"$1 "$2
(.)!%:"$1\n"

palindromize.sed バージョンの移植.正規表現にターゲット全体をマッチさせるというのに慣れない.s コマンドののりで一部にマッチするパタンを書いてしまう.一度別のターゲットに分解してしまうと他のターゲットの情報を使えないので(evalを使えば結合できるから問題ない気がする),自分のプログラムだと全体をひとつのターゲットとして保持したまま一部を書き換えるということが多い.そこで前後の文脈部分のマッチを忘れて動かないとか叫ぶことしばしば.うーむ.eval の使い方を考えるか.

-:$<
([^\n%]+)(\n(.*))?:$1%$1# $3
(.*)%(.*)#.?\2(.*):"$1$3\n"
(.*)%(.)(.*#)(.*):$1%$3$2$4

意外と仕様に合わせた出力のフォーマッティングが面倒な気がする.何かが分かっていないだけかもしれなけれど.

そして,さっき気づいたけど wake って googlability 低い名前だなぁ…

TODO: eval を使ったプログラミング作法を考える.

Home > Archives > 2010年07月21日

Search
Feeds

Page Top