タグ付けされた質問 「haskell」

関数型プログラミング言語

1
モナド関数で検証付きのエラーモナドを使用するか、バインドで直接検証付きの独自のモナドを実装する方が良いですか?
使いやすさ/保守性の観点からデザインが賢明なものは何なのか、コミュニティとの適合性に関しては何が優れているのかと思います。 データモデルを考える: type Name = String data Amount = Out | Some | Enough | Plenty deriving (Show, Eq) data Container = Container Name deriving (Show, Eq) data Category = Category Name deriving (Show, Eq) data Store = Store Name [Category] deriving (Show, Eq) data Item = Item Name Container …

9
機能開発のためのOSの選択[終了]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 4年前休業。 私は主に.NET開発者なので、通常はWindows / VisualStudioを使用します(つまり、私は甘やかされています)が、Haskellや他の(ほとんどの場合は機能する)言語を余暇に楽しんでいます。 Haskellの場合、windows-supportは問題ありません(Haskell-Platformを入手できます)が、latley基本的なClojure / Scheme環境をセットアップしようとしたところ、Windowsでの面倒な作業でした。 それで、私はより良いツールと言語サポートのために別のOSを試すことを考えています。もちろん、MacOSやLinuxディストリビューションが残っています。 私は以前にMacOSを使用したことがなく、もちろんLinuxの方が安く(無料)、通常のPCハードウェアでMacOSを並列起動できないと思います(できますか?)。プラス:私がそれらの(私にとって)外部のOSで使用できるツールについての手がかりはありません。 簡単に言うと、Haskell、Clojure、Scala、Schemeをさらに探索したいのですが、もちろん、JavaScript / HTML5 / Cssに少なくとも優れたツールが必要です。.NET / Mono / F#のサポートは素晴らしいですが、これについてはまだWin7ブートを使用します。 だから私は知りたい:-あなたの好きなOS、ディストリビューションは何ですか(Ubuntuは実行可能ですか?)-どのエディター/ IDEを使っていますか? ご協力ありがとうございました! PS:これがこの質問に適切な場所かどうかはわかりませんが、確かにそうだと思います。そうでない場合は、これをどこに移動すればよいか教えてください(StackOverflowは適切な場所ではないようです)

2
Haskell GUI:Haskellでできること
Haskellでグラフィックスを試してみたいと思っています。私が見てきたことから、利用可能なライブラリは、C / C ++ライブラリのフロントエンドか、最小限の機能を備えたそれらの抽象化のいずれかです。高レベルのライブラリーは私のニーズに合わないようなので、低レベルのフロントエンドのままにしておきます。 必要なのは、タイルとテキストをレンダリングすることです。これは、非常に単純なゲームの基本です。私はこれをCで行う方法を知っており、グラフィックをCで記述してHaskellとインターフェイスできると考えていました。別の方法は、Haskellライブラリを使用してグラフィックを書き込むことです。 私の質問は、利用可能なHaskellライブラリが私が望むものを達成できるかどうかです。私は後ろに曲がりたくありません。Cが私が知りたいよりも上手にできるなら。

3
関数型言語でのゲッターとセッター
関数型プログラミングの原則の1つは、純粋関数の使用です。ピュア関数は、副作用がなく、参照的に透過的な関数です。 ゲッターは参照透過的ではありません-ゲッターへの呼び出しの間にセッターが呼び出されると、ゲッターの戻り値はパラメーターがない(通常はパラメーターがない)場合でも変化します。 セッターは副作用を生み出します-セッターを呼び出すと、通常、戻り値ではない値が操作されます(実際、伝統的にセッターは何も返しません)。 Scalaでは、2つのパラダイム(関数型とオブジェクト指向)を組み合わせてJavaのような言語で行うようにゲッター/セッターを使用しているという事実を受け入れてくれることを知っています。 Haskellのような言語(私は流暢ではありませんが、「純粋な」関数型言語に当てはまると言われています)では、ゲッターが参照透過でセッターであるようにオブジェクトのプロパティをモデル化する方法に興味があります副作用はありませんか? 解決策は、セッターが呼び出されたオブジェクトのコピーをセッターの戻り値として返すことであり、このコピーにはプロパティ値の変更が含まれていますか?

2
Haskellで書かれたエンドユーザーのための感動的なソフトウェア?[閉まっている]
ここで何が質問されているのかを理解することは困難です。この質問は、あいまいで、あいまいで、不完全で、過度に広い、または修辞的であり、現在の形では合理的に回答することができません。再開できるようにこの質問を明確にするヘルプについては、ヘルプセンターに アクセスしてください。 7年前休業。 素晴らしい技術は目に見えません。 通常の容疑者(GHC、Xmonad、独自の取引ソフトウェア)に加えて、Haskellで記述されたエンドユーザーソフトウェアの優れた例は何ですか? FreeArc、Hledger、「Nikki And The Robots」が良い例だと思います。他に例がありますか(本格的なGUIアプリ、小さなCLIツールなど)? 編集:たとえば、私はWings3Dに魅了されています。なぜなら、Erlangで書かれているのに、ユーザーはそれを理解できないからです。うまくいきます。Haskellの弱点には、クロスプラットフォームのGUIがあります。Haskellで書かれたGUIアプリは一般的には多くなく、それらのほとんどは使いやすく、インストールもコンパイルも簡単ではありません。難しいことを簡単に見せる方法から学ぶ良い例は何ですか?
9 haskell 

1
Haskellレコードの構文に不快な感じがします
Haskell構文のほとんどには、純粋さの美しさがあります。しかし、レコードの構文は醜く見えます。それは不快です。Cとの何らかの混合を感じます。コンマと中括弧が必要です。Haskellにはタブ、行ベースの分離があります。そのため、本来必要とするよりも冗長に見えます。なぜそのように設計されているのですか?
9 syntax  haskell 

6
開業医として、なぜ私はハスケルを気にする必要がありますか?モナドとは何ですか、なぜそれが必要なのですか?[閉まっている]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 6年前休業。 彼らがどんな問題を解決するのか分かりません。

4
複数の機能を試し、成功するとすぐに停止するHaskellイディオムはありますか?
Haskellでは、タイプa -> Maybe bを使用して、タイプの値を返すかb、何も返さない(失敗する)関数をモデル化できます。 私がタイプしている場合a1, ..., a(n+1)や機能f1, ..., fnを持つ、fi :: ai -> Maybe a(i+1)すべてのためにi、1 <= i <= n私は使用して機能をチェーンできる>>=のオペレータMaybeモナドと書き込みを: f1 x >>= f2 >>= f3 >>=... >>= fn >>=各関数があれば、その前身は、意味のある値を返したように適用されていることをオペレータを確実にします。チェーン内の関数が失敗するとすぐに、チェーン全体が失敗し(戻り値Nothing)、チェーン内の以降の関数は評価されません。 同じ入力で複数の関数を試し、1つの関数が成功したらすぐに戻りたいという似たようなパターンがあります。すべての関数が失敗すると(return Nothing)、計算全体が失敗します。より正確には、私には関数がf1, ..., fn :: a -> Maybe bあり、関数を定義します tryFunctions :: [a -> Maybe b] -> a -> Maybe b tryFunctions [] …

3
Haskellおよび/またはラムダ計算におけるパラメーターなしのラムダ式
SchemeやPythonなどの熱心な言語では、パラメータなしのラムダ式を使用して、評価を遅延させることができます。たとえば、Scheme(チキンスキーム)の場合: #;1> (define (make-thunk x) (lambda () (+ x 1))) #;2> (define t (make-thunk 1)) #;3> (t) 2 2行目tは未評価の式にバインド(lambda () (+ 1 1))され2、3行目で評価されます。 同様に、Pythonでは: >>> def make_thunk(x): return lambda: x + 1 ... >>> t = make_thunk(1) >>> t() 2 この手法を使用すると、熱心な言語で遅延評価を実装できます。 そのため、言語が既に遅延しており、遅延式を作成する必要がないため、Haskellにはパラメーターなしのラムダ式がないと予想していました。驚いたことに、Haskellではラムダ式を書くことが可能であることがわかりました \() -> "s" これは次の()ような値にのみ適用できます: (\() -> "s") () …

1
Haskellのエラーモナドの反対のモナドは何ですか
エラーモナドでは、最初の失敗は実行を停止し、後続のバインドを介して障害を運ぶだけです。 どのモナドが成功を止めるのは、成功のみを先送りし、基本的には障害を飲み込み、前の失敗を無視して次のバインドを試みますか? エラーモナドは、成功のようなこの失敗の処理に使用できますが、デフォルトのライブラリにこの特定の目的のためのモナドがあるかどうか、私の心のOrモナドのように、「これか、それか」に興味があります。 編集: 動作は次のようになります: Left "fail" >>= (\x -> Right "win") >>= (\x -> Left "ahh neener") >>= (\x -> Right (x + " yay")) エラーモナドでは、最初の左の値がそのまま繰り越されるため、その結果はになりLeft "fail"ます。私が望む動作は、上記が返すところですRight "win yay"私が自分で書くことができる実装するのは簡単なモナドですが、そのようなことをするために存在するものを考えました(Eitherを使用していないかもしれませんが、そのような動作について最初に頭に浮かぶのはそれです)。
9 haskell  monad 

1
非決定論をHaskellの機能にする理由は何ですか?
私たちは中にいることを知っているプロローグ - 非決定論的述語がダウン削るために使用される機能です組合せの問題。 Haskell では、List Monadの Prolog と同様の非決定論的な動作が見られます。 Haskellでは、サンクの評価順序の選択に非決定性も見られます。 ただし、これらのサンクのどれを最初に評価するかをGHCに指示するものは何もないため、GHCは最初に評価するサンクを自由に選択できます。 これは魅力的です-そして多少解放されます。これが機能する原理は何でしょうか(8クイーンのようなロジックの問題を回避することは別として)。非決定論で解決しようとしていた大きなアイデアや大きな問題はありましたか? 私の質問は、非決定論をHaskellの機能にする理由は何ですか?

3
Haskellの型クラスとGoのインターフェースの違いは何ですか?
Haskellの型クラスとGoのインターフェースに違いがあるかどうか疑問に思っています。タイプに必要な関数が値に定義されている場合、どちらも関数に基づいてタイプを定義します。つまり、値はタイプに一致します。 違いはありますか、またはこれは同じものの2つの名前だけですか?

4
教科書が実際の言語ではなく疑似コードを使用するのはなぜですか?
大学やアルゴリズムの教科書では、教師と著者が疑似コードで制御フローを説明することは非常に一般的です。PythonやHaskellなどのより表現力のある言語の出現により、大学がこれらの言語のいずれかを介してアルゴリズムを説明するように切り替えることは合理的ですか? 私が考えることができる疑似コードの唯一の利点は、それがおそらく言語に依存しないということです。そうではありません。一部の疑似コードは命令型アプローチを使用し、他の疑似コードは機能的に見えます。著者は、使いやすいプログラミング言語からセマンティクスを借用するか、またはさらに悪いことに、セマンティクスを自然言語で記述します。では、疑似コードが実際に言語に依存しない場合、それを使用する利点は何ですか?既存の言語をそのまま使用した方がよいのではないでしょうか。

2
要求仕様を関数型プログラミングの述語ロジックに変換することは一般的な方法ですか?
最近、Haskellで実装されている小さなプロジェクトに取り組むよう割り当てられました。オブジェクト指向/命令的な背景から来て、コーディングの前に要件/ユーザーストーリーをユースケースとシーケンス図に変換することに慣れています。 しかし、私が割り当てられているHaskellプロジェクトでは、チームはユーザーの要件を述語論理命題/ステートメントに変換することを好みます。セーフティクリティカルなシステムやソフトウェアエンジニアリングの正式な方法でロジックが使用されていることは知っていましたが、日常のプログラミングではそれほどではありませんでした。これはFPレルムで一般的な方法ですか?これについてどこでもっと知ることができますか? 要件を「モデル化」し、述語から「関数」を導き、関数が操作するために必要な型仕様を書き留めるのは自然な方法のようです。しかし、それは実際にどのように行われる/推奨されるのですか、それとも私のチームに固有のものですか? (ここでこの質問をする前に徹底的に検索してみました。「関数型プログラミングの要件仕様」(および異なるキーワードの同義語と組み合わせ)を検索しても、意味のあるものは何もありません。)

1
これはHaskellメイン関数の有効なデザインパターンですか?
いくつかのHaskellアプリケーションを開発した後、純粋でないコードと完全なコードから、不純なコードと失敗する可能性のある(部分)関数を厳密に分離していることに気付きました。これらの取り組みにより、アプリケーションに関連するメンテナンスコストが大幅に削減されました。私は、時間の経過とともに、この分離を実施するために同じ高レベルの構造に依存していることに気づきました。main 一般的に、私mainは次のような構造になります。 import System.Environment data ProgramParameters = P () data ComputationResult = I () main :: IO () main = getArgs -- Collect arguments >>= andOrGetUserInput -- Collect user input >>= impureOrFailableComputations -- Possible non-recoverable error(s) >>= either -- "Branch" putStrLn -- Print Any Failure(s) pureNotFailableComputations -- Finish the work …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.