tamaño de fuente: + - prefijar
RSS 1.0
G a t a  D u r m i e n t e  -  d i a r i o
Volver al índice
Firefox :: Faster Safer Cuter
Say No to corrupt Audio CDs
三次元なんかに興味あるか、ばーか。

Tópicos Recientes

* まもなく移轉
當サイトはまもなく移轉します。

* みっくみく事件の決着
驚いた。ドワンゴが殆ど完全に折れる形で、しかもこんなに早く決着が付くとは思はなかった。こんな結末になるとは夢にも思はなかった。

* Quốc ngữ と日本語
ベトナム語は六つの聲調を持つ言語であるが、現在それを表記する爲に用ゐられてゐる Quốc ngữ ではその六声調を書き分ける事が出來るらしい。

* 自然物と信仰/生體機械としての人間/初音ミク/オープンソース戰爭
みっくみくが JASRAC された件には非常にもやもやとさせられる。だから出來るだけ消化しようと試みた。Every man thinketh his burden is the heaviest.

* HsHyperEstraier 0.1
HyperEstraier の Haskell 用バインディングである HsHyperEstraier を公開した。

Lee más...

_ domingo, 25 diciembre 2005 m4/sh/makeにコンパイル
Cuenta Larga = 12.19.12.16.7; tzolkin = 12 Manik; haab = 5 Kankin [Trackback Ping]

autoconf / automakeでは、實行する動作が非常に複雜であるにも關はらず、それを非力な言語であるm4とシェルスクリプトとMakefileだけで記述しなければならない。これではまるでアセンブラだけでコードを書き上げるやうなものではないか。もっと強力な高級言語で書けた方が楽ではないのか。

人間が強力な言語で楽に記述したロジックをシェルスクリプトへ『コンパイル』するやうにすれば、configure時に特別な處理系を必要としないので、configureの理念を保てるはずだ。

例へばSchemeで…

(set! foo (+ 1 1)) =>
foo = `expr 1 + 1`

(set! foo (+ (if (= bar 666) 10 20) 100) =>
if test "$bar" = 666; then
__tmp__001__ = 10
else
__tmp__001__ = 20
fi
foo = `expr "$__tmp__001__" + "$__tmp__002__"`

(define (func a b)
(* a b))
(if (= (func 10 5) 50)
(system 'echo "Hello, world!")) =>
__tmp__001__ = 10
__tmp__002__ = 5
__tmp__003__ = `expr "$__tmp__001__" '*' "$__tmp__002__"`
if test "$__tmp__003__" = 50; then
echo "Hello, world!"
fi

出來さうな氣がする!しませんか!?

ただ再歸的な關數呼出しを展開するにはどうしても再歸をループに變へなければならないので、これは難しいと思ふ。
前方へのgoto:
flag = true
while test "$flag" = true; do
# 飛び先
flag = false
... 何かの作業 ...
if ...; then
continue # goto
fi
done

後方へのgoto:
flag = true
while test "$flag" = true; do
... 何かの作業 ...
if ...; then
break # goto
fi
... 飛ばされた作業 ...
done
# 飛び先

(define (factorial a b)
(if (= b 0)
1
(* a (factorial a (- b 1)))))
(set! foo (factorial 10 5)) =>
__tmp__001__ = 10
__tmp__002__ = 5
__tmp__003__ = true # flag
……

やっぱり無理?
/bin/shには關數も、ローカル變數も、ローカル變數を實現する爲のスタックも無い。
…と、ここまで考へて、關數の部分だけ別ファイルにして置けば三つとも實現出來る事に気付いた。しかもこれなら再歸も出來る。プロセスが起動しまくるけど…氣にしない。
# .config.parts/factorial.sh
if test "$2" -eq 0; then
echo 1
else
__tmp__001__ = `expr "$2" - 1`
__tmp__002__ = `/bin/sh ./.config.parts/factorial.sh "$1" "$2"`
expr "$1" '*' "$__tmp__002__"
fi

# configure
foo = `/bin/sh ./.config.parts/factorial.sh 10 5`

完璧だ!變數と云ふ變數をexportして環境變數にすれば動的スコープも實現できさうだ。でも(eval (list 'define '(func a b) '(+ a b))とかやられたらどうしようも無いので、evalは削るしか無いかも。さうするとSchemeの力がだいぶ失はれるが…… やっぱり駄目か。

pythonのDistutilsSConsのやうにシェルスクリプトを捨てるしか無いのだらうか。それともシェルスクリプトでSchemeの處理系を作る?チューリング等價である以上は理論上不可能ではないのだらうが、ぞっとしない考へだ。正直やりたくない。

2002
   10 11 12
2003
   1 2 3 4 5 6 7 8 9 10 11 12
2004
   1 2 3 4 5 6 7 8 9 10 11 12
2005
   1 2 3 4 5 6 7 8 9 10 11 12
2006
   1 2 3 4 6 7 8 9 10 11 12
2007
   1 2 3 4 5 6 7 8 9 10 12
2008
   1 4

login