クローズ。この質問は
意見ベースです。現在、回答を受け付けていません。
コメント
回答
最初にHaskell、次にCommonLispの両方を学ぶことをお勧めします。 Haskellでの私の経験では、静的型付けは最初は制限的な煩わしさのように見えましたが、慣れると、ほとんどの型エラーの背後に論理エラーが隠れていることに気付きました。この時点に到達し、次のマイルストーンであるタイプで考え、ソリューションを表現する手段として独自のタイプを定義することを学ぶと、「CommonLispの準備が整います。
With Common Lisp、モナド、カリー化、そしてHaskellから好きなものすべてを追加できますが、Frank Sheararのような多重継承、多重ディスパッチを備えた汎用関数、高度な例外処理システムも利用できます。
だから、なぜCommon Lispを最初に学ぶだけではありませんか?手続きとOOPのバックグラウンドから来て、私の経験では、それを排他的に使用しなければならないまで、機能プログラミングを本当に理解していませんでした。関数型プログラミングが快適になったら、Common Lispが利用できる残りのツールを追加し、目前のタスクに最適なツールを使用できます。
コメント
回答
そしてお願いします。
Haskellはあなたに最も純粋なことを教えますSmalltalkが最も純粋なOOを教えているように、少なくとも私が知っている限りでは、FPのことです(これは、OOとFPが結婚できないことを示唆するものではありませんが、これらの言語は両方とも「宝石」言語であるためです。コアアイデアは極端に取り上げられています。)
Lispは実際には言語のファミリーなので、Common Lispについて説明します。これは、私が使用するファミリーの特定のメンバーだからです。
Lispはまだあなたに教えることがたくさんあります:
- それはマルチパラダイムなので、 dsimchaが指摘するようにそれはあなたに見せますFPを他のパラダイムと統合する方法。
- Lispは、たとえばマクロを通じて、「code-is-data、data-is-code」を教えてくれます。
- CLOSは非常に興味深いOOのブランドで、複数の継承が機能し、汎用関数があります。
回答
Haskelland Lisp 2つのまったく異なる獣です。
Haskellは一種の「象牙の塔での純粋関数型プログラミング」です
Lispは一種の「code-is-data / data-is-code /独自の言語構造を作成する」です。想像できる方法でコードを操作できます。
コードは大きく異なります。どちらも「関数型プログラミング」の側面を共有していますが、それは違いに比べて実際には小さな共通点です。試してみると、違いがわかります。
コメント
回答
Lispを後で学ぶことで、おそらく利用可能な最も高度なテキストエディタであるEmacsをカスタマイズできるようになります。Haskellではそれを行うことはできません。
コメント
回答
Lispを学ぶことで得られる主な利点は、FPを実際の言語に統合する方法を学ぶことです。 -純粋さを強調する学術言語の文脈でそれを学ぶだけでなく、世界志向のマルチパラダイム言語。
コメント
回答
私もC / C ++ / Pythonのバックグラウンドを持っており、過去数年間にFPを数回試しました。最初はHaskellを見て、頭も尻尾も作れませんでした。それからOcamlを試しましたが、それ以上のことはできませんでした。ついに私はScalaについて良いことを聞き始め、それを試し、それが私に非常に適していることを発見しました(私は過去に少しJavaもやりました)、1年後にScalaに手を出して(そして161をディスパッチしました)プロジェクトオイラーの問題)、Haskellの方がはるかに理にかなっているようです。実際、私はHaskellに関する本を数冊注文したばかりで、もう一度試してみたいと思っていますが、これは主にScalazの存在に動機付けられています。
そこで、マルチパラダイム言語(つまり、Scala、しかし、Lispはおそらく法案にも適合します)FPへの良い方法です。しかし、「Haskellに飛び込んで満足しているなら(私はそうではありませんでした)、ぜひ行ってください。
コメント
回答
私はもともとC / C ++ / Rubyのバックグラウンドから来ました可能な限り、RubyでFPの概念を使用しました。状態はちょっと私の脳を傷つけます。ある日、私の仲間の1人が私に電話をかけてきて、Haskellで何かを書くように頼まれました(私の最初の-そしてできれば最後ではない-Haskellの仕事です!)。私はすぐにその言語を学び、うまくいくものを一緒に投げました。美しくはありませんでしたが、うまくいきました。
Haskellを使用するものがなかったので、Haskellから1か月休憩しました。しかし、自分でブログソフトウェアを作成する必要があると判断したときは、Haskell( https://symer.io )を使用しました。 Haskellは、問題をパーツに分割し、入力に基づいてこれらのパーツを異なる方法で実装できるため、非常に優れています。 Haskellはまた、値のインテリジェントなボクシングを通じて障害を非常にうまく処理します。これらのボックスを操作するためのツールはたくさんあるので、それらが存在することを忘れてしまいます。
lisp(Scheme)での私の経験は完全に否定的でした。言語にはこれらのインテリジェントでシンプルなツールが欠けていただけでなく、RubyやJavaScriptと同じくらい危険なほど緩い感じがしました。それは恐ろしい経験であり、RubyまたはPython以外に新しいものは何もありません。
C ++は、メモリ管理の外では、Haskellにろうそくを握ることはできません。Haskellは、同じくらい速く(速くはないにしても)、はるかに簡潔で、はるかに安全です。しかし、Haskellの安全性は決して入りません。
TL; TR Haskellは新鮮な空気の息吹であり、Lispはもう少し機能的なRubyです。