2019年5月6日

考察・Haskell の影響

英語版Wikipedia の Python の項目には、Python が影響を受けた言語として以下の言語が挙げられています。
ここでは、Haskell について注目してみたいと思います。


Haskell が Python に与えた影響として最も大きなものは、内包表記の採用と思われます。
他の言語を習得してから Python を勉強し始めた時、記法が独特であるが故、しばしば戸惑うのが内包表記です。

# Python での内包表記の例
>>> print([i ** 2 for i in range(1, 10 + 1)])
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

実はこの内包表記の記法は、Haskell の内包表記から取り入れられたもの(のはず)です。
Haskell での内包表記は以下のようになります。
# Haskell での内包表記の例
main = print [i^2 | i <- [1..10]]
-- [1,4,9,16,25,36,49,64,81,100]
Python の内包表記と、極めて近い記法ですよね。


Python の内包表記には条件式を追加できますが、これも Haskell と同様です。

# Python での内包表記 with 条件式の例
>>> print([i ** 2 for i in range(1, 10 + 1) if i % 3 != 0])
[1, 4, 16, 25, 49, 64, 100]
# Haskell での内包表記 with 条件式の例
main = print [i^2 | i <- [1..10], i `mod` 3 /= 0]
-- [1,4,16,25,49,64,100]
条件式を含めても、やはり Python の内包表記と Haskell の内包表記は似ています。

独特な記法で知られる Python の内包表記ですが、これはHaskell の影響だった、というわけです。




他に Haskell が影響を与えたものとして明らかなのは、itertoolsライブラリです。実際、公式ページに Haskell 等の影響を受けたと書かれています。

itertoolsライブラリに含まれている cycle、repeat、dropwhile、takewhile、permutations といった関数は、Haskell にも同名の関数が用意されており、その動作も基本的に同じです。




Python はマルチパラダイム言語ですが、関数型言語に関しては、Haskell からの影響が強い、というのは知っておいて損はないと思います。

0 件のコメント:

コメントを投稿