タプルは多重代入のための機能かどうか?
ところで、それってパターンマッチの特殊系なのでは?
と、感じたので比較
まずはPythonで。
# Python
a, b = (1,3)
print(a, b)
出力
1 3
明示的に括弧をかく。
# Python
(a, b) = (1,3)
print(a, b)
出力
1 3
Pythonではa, b
と (a ,b)
は同じ意味になる模様。
Haskellでかいてみよう
-- ghci
(a, b) = (1, 3)
print (a,b)
出力
(1,3)
Haskellの場合はパターンマッチなので下記のようにもかける
3番目の要素が一致すれば束縛するという処理に変わっているので注意。
-- ghci
(a, b, 4) = (1, 3, 4)
print (a,b)
(1,3)
haskellの場合はパターンマッチなのでうまくいくことが確認できる。
しかし、Pythonはパターンマッチではないので、失敗する。
# python
(a, b, 4) = (1, 3, 4)
print(a,b)
SyntaxError: can't assign to literal
多重代入はタプルのパターンマッチの簡易版とみなすことができそうだ。