もうここ
バレるんじゃねぇのか?と思う今日この頃。プログラマボクサーというだけで
僕を知っている大半の人には、これを書いているのが僕だとばれてしまうわなー。
で、さらに驚愕の事実。「lua 関数プログラミング」で、ググるとトップに来ちゃう。しかも二件。
…いや、今日は上司が「よし、明日はluaで関数プログラミングだ」と言ってたので、
予習で、上のワードで調べましたよ。するとこのブログですよ…マジで。俺と同じように
検索してやっちまおうてな考えだとまず確実にヒットする。
で、勧進の調べたいことがヒットしないので、
「lua lambda」で検索。すると
http://d.hatena.ne.jp/winebarrel/searchdiary?word=*%5BLUA%5D
あー、確かにプログラミングサイトですけど…なんすか~、ちょっと凄い変換…。
ちなみに昔2chで見た情報だけど、
plus = function(a)
return function(b)
return (a+b)
end
end
print(plus(5)(6))
のように書ける。このあたりが、高階関数だとかなんとか…。確かupvalueという
関数生成時の環境をクロージャみたいにホールドするしくみがあるからこれができるらしい。
あへぇ~、よくわからんが凄いや。まぁ、クロージャの仕組みはActionScriptにも
出てくるからなじみはあるけど。僕はCとのやりとりにスタックに引数を乗せるしくみが
面白かった。まぁ低いレベルの話ですがね。たとえば、aという関数に引数1をのせて実行したい場合は
lua_pushstring(l,"a")//関数名乗っけて
lua_gettable(l,LUA_GLOBALSINDEX)//関数と入れ替えて
lua_pushnumber(l,1)//引数乗っけて
lua_call(l,1,0)//引数1個、戻り値1個で呼ぶ。
てな感じ、なんかアプリケーションの仕組みの勉強になりそうな感じで楽しい。
まぁここらへんをもうちょっといじいじといじるともうちょっと楽しいのだけれど
ただし、luaで関数プログラミングができても関数が多言語ではないため、
①関数に副作用なし
②変数なし
という制約はありません。うーん、しかしこのように記述することのうまみが今ひとつわからない。
クロージャの仕組みは有用ですよ。でもそれは関数プログラミングのおかげじゃない。クロージャのおかげ。
では関数プログラミングは何が嬉しいの?
http://www.sampou.org/haskell/article/whyfp.html
で、ここを読んでいるわけですが、読んでますますわからん。
わかったら次の機会にでも。…話変わっちゃったな。
| 固定リンク | コメント (0) | トラックバック (0)

最近のコメント