質問の他の一般的な間違いの精神で、Haskellのプログラマが最もよく見受けられる間違いは何ですか?私はちょっとハスケルを教えてきました。そして、私は実際の世界でそれを適用するための言語を十分に快適に感じ始めています。ハスケル開発者が避けるべき一般的なプログラミングミス?
答えて
私が知っている最も一般的な間違いは、遅れ評価でスペースリークを導入することです。このミスを達成するには多くの方法がありますが、他の関数プログラミング経験を持つプログラマーを釘付けにするのは、累積パラメーターが一定のスペースをとると考えて、累積パラメーターに結果を入れることです。多くの場合、累積パラメータはパラメータが評価されないため線形空間をとります。
別のよくある間違いはです。let
は常に再帰的ですです。意図しない
let x = ... x ...
は成果を不可解につながることができます。
その他のよくある悪い経験のほとんどは、間違いとしてではなく、プログラムが型チェッカーを通過することの問題や、モナドI/Oモデルの理解が困難なことなどがあります。リスト内包表記の問題やdo
の表記では、時折問題が発生します。彼らはI/O 行い、特に、特に型システムにおける
- 大言語が含まれ始めるが直面する一般的な難しさ、に
IO
モナドですべてをする- 遅延機能プログラムの時間と空間の動作を予測するのが非常に難しい
よくある間違い開始ハスケルプログラマーはforget the difference between constructor and type namespacesです。それは初心者の間違いで、私は自分の名前を付けることに恥ずかしいと思っていましたが、同様の問題が発生したときに他の人がその答えにつきものになることはかなり確信しています。
[]
と[[]]
の違い:空のリストと1要素のリスト、つまり空のリストです。これは、特に、再帰関数の基本ケースでポップアップします。
オーバーフローをスタックするために非テール再帰関数を使用するか、厳密なフォールドが発生しないようにします。
これは、他の関数型言語よりもHaskellではあまり真実ではありません。多くの場合、怠惰は関数の非テールバージョンをより良い選択にします(例えば、あなたは無限リストを 'foldr'することができますが、tail-recursive' foldl'は毎回爆発します)。 – Chuck
私はそれを知っていますが、head(x:xs)= head xs + 1は1000000項目のリストで爆発しませんか? – Hai
私は 'head ''(x:xs)=' x '= head' 'xsをx' \ 'seq \' x '+ 1'にしようとしました。誰でも手がかりはありますか? – ScootyPuff
表現の概念は、初心者にとってはかなり混乱しています。条件付きの構文を命令型プログラミング言語で使用します。そのコンストラクトがありますが、ハスケルにはその表現があります。したがって、if条件は一致するelseを持つ必要があり、両方とも同じタイプの評価の値を生成する必要があります。
wrongFunc n = if n > 18
then 1
else False
ifブロックは、elseがboolを返すときに整数に評価されます。これはHaskellのような一般的なエラーです。それらは文のブロックではなく式です。
なぜそれが混乱しているのかわかりません。私はハスケルの初心者です。同じことをC言語のように比較してください:明示的な戻り値が返されますが、戻り値の型はintまたはboolのいずれかである必要があり、引数の値に応じて1またはfalseを返すとエラーになります。 – Zak
- 1. 一般的な開発ノート
- 2. 一般的なPowerpoint開発者コントロールVBAでの値の保存
- 3. 一般的なMappedEntityDomainManagerを開発する
- 4. C++開発者は一般的に暗黙的なキャストをカウントしますか?
- 5. 一般的な引数のボクシングを避ける方法
- 6. 一般的なマルチスレッドミスiPhone初心者向け
- 7. 一般的なMonoTouch開発に関する質問
- 8. 一般的な開発者は、アプリを公開する前に何をしますか?
- 9. メイクファイルに危険なrmを避けるための一般的なチェック
- 10. 無人機開発中 - 一般的な質問
- 11. データベース開発 - 一般的な構造と計画
- 12. すべての開発者が知るべきPowerShellスクリプト
- 13. 一般的なlinq式を使用してエンティティの重複を避ける
- 14. 一般的な接頭辞を避けるための文法の変換
- 15. Ruby gem一般的なすべてのアプリケーション向けのデプロイ
- 16. 携帯電話用に開発するときに避けるべきAsp.netコントロール
- 17. OpenEdge 11.6のための開発者向けの開発者向けの開発者向けのプロジェクトです。
- 18. 一般的な大きさの相似数を見つける
- 19. 一般的な遅れが
- 20. 一般的なエラーがGDI +
- 21. 偶発的なファームウェアの上書きを避ける
- 22. 開発者向けモバイルデバイス
- 23. 開発者向けマニュアルSugarCRM
- 24. Delphi開発者向けQt
- 25. 一般的な方法でエラーが発生する
- 26. ハスケルの一般的なツリーからi番目のノードを削除する
- 27. 経験豊富なWeb開発者向けのAndroid開発ガイダンス
- 28. SQL開発者動的テーブル
- 29. 共有ポイントで開発中のベストプラクティスに関する一般的な質問
- 30. クイックブックオンライン・オフィシャルの統合のための一般的なAPIを開発する
もう1つはコミュニティウィキです。 – chaos
このスタイルの質問は、通常、コミュニティWikiとして評価されます。 – zombat
それが生き残ったので、他の "よくあるプログラミングの間違い"がたくさんあるとき、これがなぜ本当の質問ではないのかを想像するのは難しいです。 –