問題タブ [purely-functional]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
972 参照

uml - アプリケーションの機能図を描くには?

これを明確にするためにいくつかの良い読み物を見つけようとしていますが、見つけることができません(または、これを適切に検索する方法がわからないだけかもしれません)。

私が見つけようとしているのは、次のようなアプリケーションがあることを考慮して、

  • データベースと対話します。
  • メインフレームと対話します。
  • 外部プロバイダーとやり取りします。
  • 等...

より技術的な観点ではなく、機能的な観点でこれを表す図を描くための最良のアプローチは何ですか? どのようなアプローチを取るべきかをより明確に理解するために、どのような書籍、記事、ウェブサイトが役立ちますか?

前もって感謝します。

0 投票する
2 に答える
239 参照

haskell - 明らかに純粋なHaskellインターフェースが安全でない操作を隠していることを知る方法は?

私はunsafePerformIO最近読んでいます、そして私はあなたに何かを聞きたいです。unsafePerformIO実際の言語は外部環境と相互作用できるはずなので、ある程度正当化されるという事実で私は大丈夫です。

ただし、私の知る限りでは、呼び出しを検索する際にコードを検査せずに、明らかに純粋な(タイプから判断して)インターフェイス/ライブラリが本当に純粋であるかどうかをすばやく知る方法を知りませんunsafePerformIO(ドキュメントでは言及してください)。参照透過性が保証されていることが確実な場合にのみ使用する必要があることは承知していますが、それでも知りたいと思います。

0 投票する
2 に答える
2076 参照

algorithm - プレフィックス ツリーを使用した基本的な検索エンジンの実装

問題は、ストレージと反復メソッドを使用せずに関数型言語でプレフィックス ツリー (Trie) を実装することです。

私はこの問題を解決しようとしています。この問題にどのようにアプローチすればよいですか? 関数型言語で既に実装されている正確なアルゴリズムまたはリンクを教えてください。

私がやろうとしている理由 => の機能を備えた単純な検索エンジンを作成する

  • 単語をツリーに追加する
  • ツリー内の単語を検索する
  • ツリー内の単語を削除する

関数型言語を使いたい理由 ⇒ 問題解決能力をもう少し高めたい。

注 : これは私の趣味のプロジェクトなので、最初に基本的な機能を実装します。

編集:

i.) 「ストレージを使用しない」についての意味 => 変数ストレージ (例 int a )、変数への参照、 array を使用したくない。再帰的に結果を計算し、結果を画面に表示したい。

ii.) いくつかの行を書きましたが、書いたことが腹を立てたので消しました。私の努力を見せなくてごめんなさい。

0 投票する
1 に答える
740 参照

haskell - 純粋関数のタイムアウト

時間がかかりすぎる純粋な計算を「強制終了」するにはどうすればよいですか? 私は試した

ただし、これは機能しません。(return . fact) 99999999を「実際の」IO関数に置き換えるgetLineと、これは期待どおりに機能します。

0 投票する
2 に答える
1865 参照

haskell - 関数型プログラミングの分析と設計

Haskell のような関数型プログラミング言語を使用してシステムを開発する場合、分析と設計のフェーズをどのように処理しますか?

私のバックグラウンドは命令型/オブジェクト指向プログラミング言語であるため、ユースケース分析と UML を使用してプログラムの設計を文書化することに慣れています。しかし、問題は、UML が本質的にオブジェクト指向のソフトウェアのやり方に関連しているということです。

また、関数型プログラミングを使用して開発される予定のシステムのドキュメントを開発し、ソフトウェア設計を定義するための最良の方法について、私は興味をそそられます。

  • 代わりに、ユースケース分析またはおそらく構造化された分析と設計を引き続き使用しますか?
  • ソフトウェア アーキテクトは、システムの高レベル設計をどのように定義して、開発者がそれに従うようにしますか?
  • ソリューションの設計を提示することになっているときに、クライアントまたは新しい開発者に何を示しますか?
  • 最初にすべてを書かずに、全体像をどのように文書化しますか?
  • 関数の世界でUMLに匹敵するものはありますか?
0 投票する
3 に答える
1261 参照

algorithm - 合流持続性の実用化

BrodalらによるPurely Functional Worst Case Constant Time Catenable Sorted Listsを読んでいます。そして、データ構造のコンテキストにおけるさまざまな種類の永続性への導入は、私に明らかな疑問を残します:

コンフルエントな永続性:すべてのバージョンを更新およびクエリでき、さらに 2 つのバージョンを組み合わせて新しいバージョンを作成できます。この場合、それ自体を繰り返し結合することにより、指数関数的にサイズの構造を多項式時間で作成できることに注意してください。

それ自体を繰り返し結合することにより、多項式時間で「指数関数的にサイズの」構造を作成できる実用的なアプリケーションは何ですか?

0 投票する
3 に答える
613 参照

function - `(Integer a) => a -> Bool` と `Integer -> Bool` の違い?

今日、Haskell で最初のプログラムを書きました。正常にコンパイルおよび実行されます。そして、これは典型的な「Hello World」プログラムではないため、実際にはそれ以上のことを行うので、よろしくお願いします :D

とにかく、自分のコードと Haskell の構文に関しては、ほとんど疑いがありません。

問題:

N私のプログラムは、標準入力から整数を読み取り、i範囲内の各整数について、 が素数[1,N]かどうかを出力します。i現在、入力エラーのチェックは行っていません。:-)

解決策:(疑問/質問も)

この問題を解決するために、整数の素数性をテストする次の関数を作成しました。

それはうまくいきます。しかし、このチュートリアルで読んだことが機能せず、このエラーが発生したため、最初の行は多くの試行錯誤の結果であるとは思えません (そうは言っていませんが、これはエラーだと思います) ):

チュートリアル(ちなみに、これはよくできたチュートリアルです) によると、最初の行は次のよう(Integral a) => a -> String(Integer a) => a -> Boolになります

これは機能せず、上記の投稿されたエラー (?) が表示されます。

そして、なぜそれが機能しないのですか?この行 (機能しない) と行 (機能する) の違いは何ですか?


1また、にループする慣用的な方法は何Nですか? コード内のループに完全に満足していません。改善を提案してください。これが私のコードです:

0 投票する
2 に答える
4872 参照

scala - Scala の副作用

私は最近Scalaを学んでいます。よく知っているとは言えませんが、私は Haskell に少し精通しています。

Haskell に慣れていない人のための括弧書き

私が Haskell で気に入っている特徴の 1 つは、関数がファースト クラスの市民であるだけでなく、副作用 (アクションと呼びましょう) も含まれていることです。実行時に type の値を与えるアクションはa、特定の type に属しIO aます。これらのアクションは、他の値とほとんど同じように渡すことができ、興味深い方法で組み合わせることができます。

実際、副作用を実行することはできないため、Haskell で何かを行うには、副作用を組み合わせることが唯一の方法です。むしろ、実行されるプログラムmain、関数によって返される結合されたアクションです。これは、プログラムに実際に電力を消費する以外のことをさせながら、関数を純粋にすることができる巧妙なトリックです。

このアプローチの主な利点は、副作用を実行するコードの部分をコンパイラが認識しているため、それらのエラーを検出するのに役立つことです。

実際の質問

たとえば、特定の関数内で副作用を実行しないことが保証されるように、コンパイラに副作用をチェックさせる方法はありますか?

0 投票する
6 に答える
2284 参照

c - printf() が不純な関数であるのはなぜですか?

私の知る限り、不純な関数とは、同じパラメーターで呼び出されたときに常に同じ値を返すとは限らない関数です (何かが欠けているか、間違っている可能性があります。間違っている場合は修正してください)。

では、なぜ はprintf()不純な関数と見なされるのでしょうか?

0 投票する
2 に答える
1020 参照

functional-programming - 関数型言語で変数を変更してもよいのはいつですか?

だから私はRacketSchemeを使って関数型プログラミングを自分で学んでいて、今のところそれが大好きです。私自身の演習として、純粋関数型の方法でいくつかの単純なタスクを実装しようとしています。不変性は機能的なスタイルの重要な部分であることは知っていますが、それで問題ない場合があるのではないかと思いました。

ここに示すように、フィルターとともに使用すると、関数が文字列のリストから一意でない文字列を削除する楽しい方法を考えました。

ご覧のとおりmake-uniquer、一意性を比較するために文字列のリストのクロージャを返します。これにより、フィルタの単純な述語として機能できます。しかし、私はクローズドオーバーリストを破壊的に更新しています。これは悪い形式ですか、それともローカルのクローズドオーバー変数をそのような方法で変更しても大丈夫ですか?