純粋に機能的な言語で、副作用を導入せずにAPIに接続する方法を知りたいだけですか?機能的に純粋な言語でAPIにどのように接続しますか?
答えて
Haskellなどの純粋に機能する言語は、"foreign function interfaces"を介して外国語の呼び出し関数をサポートしています。
外国語機能の種類と動作を純粋に機能的な言語(Haskellなど)にエンコードする方法があります。副作用は直接セマンティック問題なく埋め込むことができずに外国語で
ピュアな機能
機能:
は、考慮すべき2例があります。例は、Cでsin :: CDouble -> CDouble
不純な機能
不純な機能は副作用があります。しばしば、彼らは外国語の側の状態を変更する。このような関数は、副作用を正しく処理するために、依存関係/逐次の順序で呼び出さなければなりません。
これを純関数言語に埋め込むには、状態を表す外部関数との間でトークンを渡すことができます。あなたが外部関数を呼び出すたびに、新しいトークンが返され、古いトークンが破棄されます。そう
let state0 = initState
(v, state1) <- foreignFunction state0
(u, state2) <- foreignFunction state1
return (v,u)
副作用は、(関連して)state
変数を修正純関数として捕捉されます。これらを前後に渡すことで安全性が確保されます。
ステートトークンを渡す配管を隠すには、モナドを使用できます。
このアプローチは、たとえばHaskellのステートフルな外部APIとのインタフェースでは非常に一般的です。製品例:MTGen
トークンをライブラリが初期化された証拠として使用するmersenne-twister binding.。
APIが純粋に機能的でない場合は、できません。コードで簡単に認識できるように、変異効果を分離するのが最善の方法です。
downvoterに。純粋に制御できない状態の不純な関数を作ることはできません。 @ DonStewartの例のように状態を維持できれば大丈夫ですが、多くの不純なAPIには制御できない状態があります。 – Guvante
- 1. 機能的で純粋なプログラミング言語
- 2. インテリジェント純粋に機能的なセット
- 3. C#純粋に機能的な辞書
- 4. 純粋に機能的な言語における副作用の可能な手段
- 5. weakhashmapの純粋に機能的な同等物ですか?
- 6. C言語:どのように機能
- 7. 純粋に機能的なマップとセットの統計的性能
- 8. ビジュアルプログラミング言語はどのように機能しますか?
- 9. 純粋にオブジェクト指向の言語
- 10. 純粋なスウィフトTCP接続
- 11. レール接続プーリングはどのように機能しますか?
- 12. LINQは純粋に機能的ではないのはなぜですか?
- 13. 純粋な機能のタイムアウト
- 14. 機能コンポーネントを「純粋」と宣言します
- 15. 以下はどのように純粋な関数ですか?
- 16. 'phonegap api'アプリケーションと純粋なネイティブアプリケーション(obj-C)コードを接続できますか
- 17. pub/sub-likeシステムはどのように機能的な言語で実装できますか?
- 18. Kotlinの言語の種類は何ですか?純粋なOOPまたは機能
- 19. 純粋な角雲の接続
- 20. 接続プーリングは実際にどのように機能しますか?
- 21. Drupal 8のようなプラットフォームで多言語サポートはどのように機能しますか?
- 22. 純粋なvbscriptを使用してmysql 5.0データベースに接続しますか?
- 23. ReactiveMongo接続プーリングはMongoDBサーバー接続に関してどのように機能しますか?
- 24. PHPのp *接続メソッドはどのように機能しますか?
- 25. サーバークライアントのプッシュ/プル接続はどのように機能しますか?
- 26. F#何が機能的な言語になるか
- 27. 機能的/ステートレスの純粋なコンポーネントを返信する
- 28. 純粋なScalaでboxed Doubleをどのように表現できますか?
- 29. 「真の」純粋な機能的二重リンクリストやHaskellでのように書くことができ
- 30. 言語モデルの評価は未知語でどのように機能しますか?
"* APIとの接続*"という正確な意味はありますか? Web APIについて話していますか? – sepp2k
機能ライブラリにもAPIがあります。あなたが話しているAPIの種類*についてより具体的になるのに役立ちます。おそらく非純粋なものなので、Donの答えが役に立つでしょう。 – Ben