Swift 言語 ForwardIndexType を探る旅

Swift 言語の ForwardIndexType と、ひいては Indexable の性質を探っていた時のツイートをまとめました。自分自身のツイートと合わせて、とても勉強になったツイートもまとめさせて頂きました。
1
前へ 1 ・・ 3 4 6 次へ
熊谷 友宏 @es_kumagai

あ、表現調整。非連続的なもので「いわゆる範囲(?)」を表現するときは Comparable みたいな、範囲を形作るための概念が追加で必要になったり。IntervalType は Bound が Comparable 。 #read_swift

2016-05-15 11:54:19
熊谷 友宏 @es_kumagai

Bound の比較性によって、最初と最後を特定できる、みたいな感じね。 #read_swift

2016-05-15 11:56:29
熊谷 友宏 @es_kumagai

あ、非連続的というのも表現が悪いか…? いや、連続だろうと不連続だろうと大丈夫? いや、IntervalType の規定次第か。 #read_swift

2016-05-15 11:58:48
熊谷 友宏 @es_kumagai

自分のツイートを見返してみてると『連続』の話のところでかなり言葉がふらふらしてますね。その言葉を何に重ねたいのか、もっとちゃんと考えないとダメそうね。 #read_swift

2016-05-15 20:27:27
熊谷 友宏 @es_kumagai

連続ではなく滑らかか、なのかな? 浮動小数点数は、なんとなく連続そうにも思えるけれど、その考え方においてはとりあえず連続ではない、表現できない値がある、からあながち間違いだとも言えないのか。 #read_swift

2016-05-15 20:33:04
熊谷 友宏 @es_kumagai

だとしたら、もし仮にリアルな実数がコンピュータ上で表現できたら、それは連続? もう少しいうと successor はそこに存在し得るのか。途方もない数のそれに目眩がしそうですけど、それは単に人知を超えているだけかもしれない。とりあえず範囲は想像できそう。 #read_swift

2016-05-15 20:36:47
熊谷 友宏 @es_kumagai

そうしたときに Range と Interval の違いはどう感じていくことになろうか。前者は範囲、後者は間隔? やっぱり前者はその範囲が満遍なく、その世界観で満たされてそうね。後者はとにかく隙間があろうと2点間の離れ具合を意味すれば大丈夫そう。 #read_swift

2016-05-15 20:42:28
熊谷 友宏 @es_kumagai

前者はやっぱり空間的、軸と表現するのが相応そう。後者は値寄りな香りがしそうね。Range は Index として IndexType を取るのに対して、Interval は Bound として Comparable を取ることも、自然に見えてきますね。 #read_swift

2016-05-15 20:51:21
熊谷 友宏 @es_kumagai

そうなってくると、IndexType ってついつい「索引」つまりは辞書とか目次とか配列とかのインデックスを想像して捉えてしまってましたけど、もっと広い世界観を描いているかもしれませんね。その定義域にある全ての存在を指し示せるもの、みたいな。 #read_swift

2016-05-15 20:54:22
熊谷 友宏 @es_kumagai

ちなみに余談で ForwardIndexType を軸と表現しましたけれど、その軸が直線であるかとかはこの世界観では言及されていないところが面白いところ。人から見たら、その軸は大きく湾曲しているかのように観測されるかもしれない。 #read_swift

2016-05-15 20:56:58
熊谷 友宏 @es_kumagai

もうひとつ、興味深い話を調べてて見つけました。実際はまだ試してないのですけど、どうやら map メソッドって Range にはあって Interval にはないのだとか。たしかに連続性が伴わないと、その世界を別の世界に正しくマップできなさそう。 #read_swift

2016-05-15 21:01:23
熊谷 友宏 @es_kumagai

ちなみにいっけん離散しているようにも思える任意の値の配列は、先ほどの map の観点的に CollectionType の世界観では連続と捉えて大丈夫なはず。たぶん。話が本筋を外してきている心地もしつつ。 #read_swift

2016-05-15 21:04:39
熊谷 友宏 @es_kumagai

自分はどうも言葉を咀嚼するより前に喋ってしまうところがあって、それが悪い癖な気がする。

2016-05-15 21:14:46
熊谷 友宏 @es_kumagai

ちなみにさっきの IndexType の広い世界で捉えられそうという話は、直線的な状態遷移を表現する enum を IndexType プロトコルに準拠させて適切か、というのを思ったことがきっかけでした。 #read_swift

2016-05-15 22:02:41
熊谷 友宏 @es_kumagai

でもそういえば、それと似たような表現に SequenceType があるようなと思ったりしつつ、それとの違いはなんだろうと思ってみたとき、SequenceType が着目している連続は Element の連続ですね。 #read_swift

2016-05-15 22:36:30
熊谷 友宏 @es_kumagai

IndexType は、それ自体の世界観の連続性というか。さらには先ほどの Range とかと合わせて想像したとき、仮に先ほどの自分の認識を正しいとしたら、インデックスは『その空間』を指し示すための道具とも言えそう。 #read_swift

2016-05-15 22:38:32
熊谷 友宏 @es_kumagai

そうしたときに、状態遷移の状態が『その空間』を指し示すためのものと言えるのかどうか。状態遷移に空間という概念は存在するのか。Distance は生まれるのか、でもいい。 #read_swift

2016-05-15 22:39:13
熊谷 友宏 @es_kumagai

そう考えていくと、直線的な状態遷移を表現する列挙型を IndexType としてみるのは、何か不自然な感じが自分の中で強まってきました。SequenceType とも違うし。 #read_swift

2016-05-15 22:42:36
熊谷 友宏 @es_kumagai

Forward な状態遷移であれば GeneratorType でもいけるかもしれないなとも思ったけれど、これも、着目するのは Element ね。 #read_swift

2016-05-15 22:43:55
熊谷 友宏 @es_kumagai

素直に、そういう状態遷移の性質をプロトコルに表現させようとしないで、列挙型で表現すれば良いだけのことかもしれない。実際 Range も構造体で、それを CollectionType で説明してはいますけど、別に Range がそういう性格を持ってるだけね。 #read_swift

2016-05-15 22:46:00
熊谷 友宏 @es_kumagai

ああ、そうなると自分の IndexType と Element の主張のところに何か矛盾めいたものを感じるのかな?とも思ったけれど、Range という発想に至った時には、その空間を指し示す各々のインデックスを要素と捉えてもアリなのかもしれない? #read_swift

2016-05-15 22:48:26
熊谷 友宏 @es_kumagai

それと、かたや IntervalType は Range と違ってプロトコルで規定されていていたりして。これは HalfOpenInterval と ClosedInterval の二つがあるからそれの足並み合わせ…ともとれるかもしれないけれど、 #read_swift

2016-05-15 22:50:57
熊谷 友宏 @es_kumagai

それ以上に「Interval」という世界観が、そこには描かれているのだろう、と思う。深追いしてないのでわからないですけれど。IndexType と同じ感じね。 #read_swift

2016-05-15 22:51:56
熊谷 友宏 @es_kumagai

空間 (Range) は、空間を指し示す IndexType が連続に連なって(積分?)描かれた世界。そのすべての場所に於いて密な空間(であることを IndexType が保証)なのかな。 #read_swift

2016-05-15 22:56:36
前へ 1 ・・ 3 4 6 次へ