Skip to content

Instantly share code, notes, and snippets.

@takasek
Created April 3, 2016 09:02
Show Gist options
  • Save takasek/b3841e4a96352853825c99d039dd704f to your computer and use it in GitHub Desktop.
Save takasek/b3841e4a96352853825c99d039dd704f to your computer and use it in GitHub Desktop.
AnyGeneratorで植木算。なんとかステートレスにしたいんだけど難しいかなぁ… #CodePiece #cswift
func uekizan<S: SequenceType>(sources: S, insert margin: S.Generator.Element) -> AnyGenerator<S.Generator.Element> {
var gen = sources.generate()
var isMargin = false
var preserved: S.Generator.Element? = gen.next()
return anyGenerator {
defer {
isMargin = !isMargin
}
switch (isMargin, preserved) {
case (true, .Some):
return margin
case (false, let value?):
preserved = gen.next()
return value
default:
return nil
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment