6

Racketのパターン マッチング機能が非常に強力であることがわかりました。

> (match '(1 2 3) [(list a b c) (list c b a)])

'(3 2 1)

> (match '(1 2 3) [(list 1 a ...) a])

'(2 3)

> (match '(1 2 3)
    [(list 1 a ..3) a]
    [_ 'else])

'else

> (match '(1 2 3 4)
    [(list 1 a ..3) a]
    [_ 'else])

'(2 3 4)

> (match '(1 2 3 4 5)
    [(list 1 a ..3 5) a]
    [_ 'else])

'(2 3 4)

> (match '(1 (2) (2) (2) 5)
    [(list 1 (list a) ..3 5) a]
    [_ 'else])

'(2 2 2)

Pythonでそれを行うための同様の構文シュガーまたはライブラリはありますか?

4

4 に答える 4

4

いいえ、ありません。python のパターン マッチングは、次のような反復可能な展開のみです。

>>> (x, y) = (1, 2)
>>> print x, y
1 2

または関数定義で:

>>> def x((x, y)):
    ...

またはpython 3で:

>>> x, *y = (1, 2, 3)
>>> print(x)
1
>>> print(y)
[2, 3]

ただし、パターンマッチングを実現する外部ライブラリがいくつかあります。

于 2012-08-10T21:48:23.817 に答える