LoginSignup
6
6

More than 5 years have passed since last update.

Swift で Enumerable モジュールを作ってみた

Last updated at Posted at 2014-06-15

試しに Enumerable モジュールを作ってみた

無限リストを扱え、メソッドチェーンでリストを加工出来る Enumerable モジュールをSwiftで書いてみました。

Enumerable.swift

例えば、こんな使い方が出来ます。

import Enumerable

var x = Enumerable(sequence: 1...100)
println(x.filter{$0 % 2 != 0}.map{$0 * 3}.take(10).toArray())

//=> [3, 9, 15, 21, 27, 33, 39, 45, 51, 57]

その他のサンプルプログラムはこちら
enumerable_sample.swift

クロージャで実装

当初は Generator を使って作ってみていたのですが、next() の型宣言まわりでどうにも上手く行かないケースがあり、大変苦労したあげく断念しました。
苦労した理由はこれ → protocol はジェネリックに出来ない
クロージャで実装する事を思いついたのでやってみると、あっさり実装できて、しかもシンプルになりました。

Generatorでの実装はこれ → BadEnumerable.swift
一応そこそこには動きますが、複雑な事をするとコンパイラが死にます。
コンパイル出来ないものがこれ → badEnumerable_sieve.swift
ジェネレータの中でジェネレータを生成して、その中でさらにジェネレータを… と重ねていくのですが、
型チェックで無限ループに陥ってしまっているのかも知れません。

6
6
0

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
6
6