part2Luaで、Haskellで書いたやり方でLuaで書けないかやってみた。s)end無駄にめんどくさくなった気がする。明日の自分のための解説まず、cycle関数。汎用forループを説明しておかないと。Luaの汎用forループは、次のような形をしています。doループの1回目は次のように値が代入されます。キーの初期値)2回目以降は関数の第2引数に前回のキーの値が入ります。して順にキーとバリューを取り出していきます。pairs関数は、next関数、引数で与えられたテーブル、nilの3つを返す関数になっていて、上記の条件を満たしています。上記で定義したcycle関数は、next関数を返す代わりにキーが終端に来たら最初に戻る関数を返すことで、循環させています。0というのは、iがnilならば、orの右辺を評価した値が式の値になります。iがnilなら、0が、nil以外ならその値が、iに代入されます。1が、nilならば1が式の値になり、iに代入されます。C/C++の三項演算子に似た効果がえられます。プログラミング言語Lua公式解説書」にも書かれている、らしいです(わたし未読)。論理演算子の遅延評価を使ったテクニック。これで循環する文字列の並びができました。これだけだとテーブルの文字列が回るだけです。print(v)endこれを取り出して扱えるためにcoroutineを使います。fizz、buzzがそれにあたります。上記では関数の定義とコルーチンの生成を同時にしているのでわかりにくくなっていますが、わけて書くとこんな感じです。coroutine.create(fizz_func)さて、これでループ一回ごとに処理が戻ってくるようになりました。あとはfizzとbuzzと数列を組み合わせて表示するだけ。ここがまたちょっと不格好。一段階、どうにかしたいところ。(6)はてなブログをはじめよう!E_Mattsanさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。