LoginSignup
2
1

More than 5 years have passed since last update.

ジェネレータを実装する

Last updated at Posted at 2016-12-12

ジェネレータを実装する

Julia advent calendar 2016 13日めの記事です。 簡単なジェネレータを書いてみました。初心者なので、間違い・もっと良い書き方があれば教えてください。※頂いたコメントを元に修正しました。

ジェネレータ

リストのように最初からすべての要素を用意するのではなく、必要な時に生成していくもの。

listの中身を+2した文字列を生成するジェネレータ

function main()
    list = [1,2,3,4,5]
    generator = (syori(i) for i in list)
    for i in generator
        println(i)
    end
end

function syori(i)
    v = string(i + 2)
    return v
end
main()

syori()

listの各要素にかけたい処理。複雑な処理でも関数を作ってGenerator式に渡せば綺麗に書ける。

generator = (syori(i) for i in list)

Generator式でジェネレータを作成。for文などで要素を取り出せる。

listの中身を+2した文字列を生成するジェネレータ Task

以下の実装はPythonのyieldを使用したジェネレータと似た動きをする。(再利用できない)
基本的には上記のGenerator式を使ったほうが便利そう。

function main()
    list = [1,2,3,4,5]
    for i in @task generator(list)
        println(i)
    end
end

function generator(list)
    for i in list
        v = "$(i + 2)"
        produce(v)
    end
end
main()

produce()

ループを一時停止して生成されたvの中身を返し、ループを再開する。

@task

これを付けてfor文などで回すと要素を取り出せる。

2
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1