Swift 言語 ForwardIndexType を探る旅

Swift 言語の ForwardIndexType と、ひいては Indexable の性質を探っていた時のツイートをまとめました。自分自身のツイートと合わせて、とても勉強になったツイートもまとめさせて頂きました。
1

ForwardIndexType の概念をうまく捉えられない
そう思って過ごしていたある日のできごと

熊谷 友宏 @es_kumagai

ふと ForwardIndexType のイメージが湧いてきたかもしれない。いつから『序列がある』と錯覚していた…? みたいな心地で。

2016-05-02 20:58:19
熊谷 友宏 @es_kumagai

さらには、それが『直線的に並ぶ』と錯覚していた…? とも言えそうな心地。

2016-05-02 20:59:39
熊谷 友宏 @es_kumagai

_Incrementable という言葉、とりわけ「増加」という言葉に惑わされていたけれど、もちろん込めた意味はあるのでしょうけど _ で始まるのでひとまず話半分とさせて頂いて…実際、コメントでも「ForwardIndexType の細部実装」としか語られてなくて。

2016-05-02 21:04:51
熊谷 友宏 @es_kumagai

肝心の ForwardIndexType は『分散した(つまり距離感という概念のある)値のシリーズであり、すべての値に successor で後続を辿ってたどり着ける』と謳われていて。実際のプロトコルの響きからもそれは想像できるところで。

2016-05-02 21:07:28
熊谷 友宏 @es_kumagai

このとき、序列について語られてなければ、直進性についても語られていない。というか、距離が生じるということは、空間的な概念はあると思うけれど、その空間概念が語られてないので、シリーズが直線的に並ぶとは限らない、曲がる…という表現も不適切かもしれないけれど、

2016-05-02 21:09:20
熊谷 友宏 @es_kumagai

とにかくきっと、シリーズの起点に最後の次が辿り着いたっていいくらいの世界観。直線上とかリング上とか、もうそんな感覚を超えた、シリーズの世界。もしかして、数学勉強会で教えてもらったリーマン球面みたいなものを想像してみてもいいのかもしれない。複素平面を超人的にグワッと、っていうやつ。

2016-05-02 21:14:30
熊谷 友宏 @es_kumagai

シリーズの世界、って適当に言ったら分かりにくかった。とにかく、つながっている一連の流れ。Forward という概念があるので、いちおう時間みたいな、流れだけは存在するみたい。そしてある点を起点にしたら、それより先の流れにあるすべてに必ず successor でアクセスできる。

2016-05-02 21:24:24
熊谷 友宏 @es_kumagai

そしてともすると、最後の後に戻ってくるかも…、というよりこの世界観においては「戻る?なにそれ」みたいな心地なのかもしれない。単純に時が次へと進んでいくだけ。

2016-05-02 21:25:31
熊谷 友宏 @es_kumagai

そして序列を約束するのが Comparable で、ここで上流下流みたいな序列の概念が生まれて。Int が ForwardIndexType で且つ序列を持った存在ですね。

2016-05-02 21:27:58
熊谷 友宏 @es_kumagai

そんな Int を ForwardIndexType の世界観で辿るのであれば max.successor が min になっても不思議はない(戻ってない)けど、序列的概念を意味合いに持つ範囲(先頭から末尾まで)を表現しようとした時、本能が序列の概念と整合性を取ろうと働く。

2016-05-02 21:29:26
熊谷 友宏 @es_kumagai

とにかく ForwardIndexType であれば『ひと連なりの定義域があって、その一番最初の流れからすべての値を successor でぜんぶ辿れる』ことさえ満たしていれば万々歳かな?

2016-05-02 21:35:40
熊谷 友宏 @es_kumagai

あれ、そうなると SequenceType との違いが見えなくなってくるような?とも思いましたけど、きっと ForwardIndexType は単純に値に着目した流れね。SequenceType は空間的なもの(要は直線性)まで含むのかもしれない。

2016-05-02 21:38:09
熊谷 友宏 @es_kumagai

ともあれそんな世界観であると想像してみたときに ForwardIndex の最後の次はどうなるんだろう。

2016-05-02 21:39:31
熊谷 友宏 @es_kumagai

でもやっぱり、そこで世界観が尽きるなら fatalError が妥当かな? その次が流れ的に妥当なら起点の値(日→月→・・→土→日)

2016-05-02 21:43:49
熊谷 友宏 @es_kumagai

そして距離という観念がある以上、最後を示す意味で同じ値を返すことはなさそうな気運が高まってきた、けれど番兵としての end の存在自体は価値がありそう。そうすると、自分の今の想像ではまだ何かが足りないみたい。

2016-05-02 21:44:16
熊谷 友宏 @es_kumagai

…無限遠点? なんて、ひらめいた言葉をつぶやいただけで、それがパズルのピースのように嵌め込めるかはまだ分からない。

2016-05-02 21:45:55
熊谷 友宏 @es_kumagai

とりあえずここまで考えてみて、じゃあもしかして Int に対して distanceTo を逆順に取ると面白い結果になったりする?と思ったら、期待は外れて適切な値になった。 gist.github.com/b6dd6cec1c77ec… #swift pic.twitter.com/1RBG57XNNS

2016-05-02 21:50:25
拡大
熊谷 友宏 @es_kumagai

Int は RandomAccessIndexType ですし、何より Int が自分の責任で distanceTo を実現してますもんね。自然なことでした。

2016-05-02 21:51:07
熊谷 友宏 @es_kumagai

それならジェネリックを使えば面白く!…と思いましたけど、こちらも普通…。違うか、これは2の補数表現の賜物か。裏側では面白いことになってるのかもしれない。 gist.github.com/a042bc285529da… #swift pic.twitter.com/cnwu3yDlvb

2016-05-02 21:58:55
拡大
熊谷 友宏 @es_kumagai

なるほど2の補数表現か。確かにその世界観なら Forward 方向に対して Int.max.successor() が Int.min になって、論理的にも不思議がない。 gist.github.com/3a158f39039d7e… #swift pic.twitter.com/ZWOZWhzepi

2016-05-02 22:01:28
拡大
熊谷 友宏 @es_kumagai

Int の世界観が多分完璧にわかった。これなら確かに Int.max の後続が fatalError である必要が全くないし、数値という概念の上で範囲を組み立てる上で Comparable も大事な要素ね。

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

それにそもそも Int は精神世界ではなくて現実世界だ。そんな肝心のところを忘れて Int を概念だけで捉えようとしてしまってた。

2016-05-02 22:07:24
熊谷 友宏 @es_kumagai

そんな感じで end の観念はまだ見えないけど、Int については完璧だ。

2016-05-02 22:11:06
熊谷 友宏 @es_kumagai

あ、end についてもなんかちょっと閃きました。あれは Indexable の概念か。何を持って end とするかはそちらの世界、逆に言うと end を表現できない IndexType の世界観では Indexable 性を説明できない、だけの話かもしれない。

2016-05-02 22:12:48
1 ・・ 6 次へ