Pythonで末尾再帰的な何か&HAL2000的な何か

[pukiwiki]
必要なデータのダウンロード待ち中。。。なので、ちょこっと巡回
*[[Lip-reading computer picks out your language :http://www.newscientist.com/article/mg20227055.800-lipreading-computer-picks-out-your-language.html]]
*[[Lip-reading computers can recognize different languages:http://www.gizmag.com/lip-reading-computers/11551/]]
映画「2001年宇宙の旅」にて、コンピュータのHAL2000(ハル)が、宇宙飛行士たちの会話を、唇を読むことによって盗み聞きする、という有名なシーンがあります。
こちらの記事によれば、イギリスの大学がコンピュータによる読唇術を開発中とのこと。耳の不自由な人に役立てることが目的の研究、みたいです。
現在はまだ研究初期の段階ですが、”何語を話しているか”を、唇の動きだけで判定できるらしい。

映画だとコンピュータの怖~~い側面を強調するシーンでしたけれども、実用化されてみると、意外にお役立ちですねー
*[[Pythonで末尾再帰的な何か:http://neopythonic.blogspot.com/2009/04/final-words-on-tail-calls.html]]
Pythonの生みの親Guido van Rossumさんのblogにて、[[末尾再帰最適化>ググる:末尾再帰最適化]]の話題に。Pythonは末尾再帰最適化を行ってませんが、Guidoさんによる、似たような挙動のサンプルコードは。。。

[/pukiwiki]

元記事のコードを実際に動くようにすると、たとえば、こんな感じ。

loop_end="loop end"
def f(x):
    #print x
    if x > 10 : raise loop_end
    return f,(x+1,)

func, args = f,(0,)
try:

    while True:
        func, args = func(*args)
except loop_end:
    print args

[pukiwiki]

コルーチンだとこんな感じ
[/pukiwiki]

loop_end="loop end"
def f1(x):
    print "f1"
    if x > 10 : raise loop_end
    return f2,(x+2,)

def f2(x):
    print "f2"
    if x > 10 : raise loop_end
    return f1,(x-1,)

func, args = f,(0,)
try:

    while True:
        func, args = func(*args)
except loop_end:
    print args

[pukiwiki]
ActionscriptにおけるgotoAndPlay関数っぽい挙動。
。。。って書くと自分以外の人には判りにくいですけれども(汗
[[ラウンドロビン>ググる:ラウンドロビン]]なカーネルっぽい?(違うかも?)

PyGameのループ部分でマネしたいかも、と思ったのでメモ。

関連記事
[[Tail Recursion Elimination:http://neopythonic.blogspot.com/2009/04/tail-recursion-elimination.html]]
[/pukiwiki]

コメントを残す

メールアドレスが公開されることはありません。