2011-07-04 19 views
2

C言語は実際には命令型言語の一種です。C言語とHaskell

ハスケル私はそれが関数型プログラミング言語なので完全に異なっていると思います。

ハスケルと十分なレベルの知識を得るために私が直面する主要な問題は何ですか? "十分な" のあなたの定義に依存

Melawe

+3

申し訳ありませんが、それはほとんど答えることのできない質問だと思います。動的に型付けされた必須/ OO言語から来て、私はハスケルの*機能*の側面がほとんど言及する価値がないことを知る。私を得るのは*型システム*です。これはあなたの個人的な経験に完全に依存しています... – deceze

+1

ハスケルでは、宣言せずに変数を使うことができます。関数を変数として使うことができます。型宣言はCとは異なります...私はまったく異なる姿勢ですプログラミングに向かって... – Melawe

+0

まあ、そうです。だから、あなたが最も困っていることをあなたに伝えるのは難しいです。最後に、関数呼び出しを関数呼び出しの中に入れてすべてを書くことで、C言語の関数プログラミング(ある程度拡張)を行うことができます。すでに他の言語でこれを練習すればするほど、機能的な言語で作業できるようになります。 – deceze

答えて

0

感謝。ハスケルのモナドは習得が難しいことはよく知られていますが、単純な演習で始めることで、「機能的な方法」で考えることに慣れ、タイプシステムに精通していることが必要です。初心者の方は、Programming in Haskellに手を差し伸べることを強くお勧めします。

0

主なトラブルは?最初は可変構造が欠けています。

少なくとも、手続き型言語の作業に長時間を費やした後に、機能的な言語を手にすると、それが起こります。

5

非網羅リスト:

  • returnは、あなたがそれが意味どう思うかという意味ではありません。
  • if - thenからelse - Cのifより:からelseは、より多くのCの?のようなものです。特に、elseブランチはオプションではありません。
  • インデントの問題。 if - then - elsedoブロック内に使用する場合は特に注意してください。
  • 暗黙のキャストはありません。 (異なる数値型の間で明示的に変換する関数があります。これは、これによって最も頻繁に機能しなくなります)
  • Cスタイルのループはありません。代わりに、あなたの "ループ" が何をするかに応じて、map/fmap/<$>foldr /その他の折りたたみ機能、filterzip/zipWithは/ etc、またはリストの内包表記を使用します。 (そして再帰が必要な場合は利用可能です。)
  • 変更可能な状態は使いにくい(通常は間違った解決策です)。