私は "call/cc"を任意のコントロールフローのコンストラクトを実装するために使うことができるので、 "call/cc"を使ってそのようなコンストラクトを実装しようとしていますが、私が "if-syntax"と "call/cc"を使ってどのように実装するのか、 "if"がないと仮定しますか?それは可能なのか、それとも私は誤解されたことがありますか?私は "call/cc"を使って無条件ジャンプを実装する方法を知っていますが、マシンレベルで条件分岐実行はプロセッサのステータスビットに依存する分岐命令で実行されます。このタイプの構造がなければ、私はそれがどうやってできるのか分かりません。"if"を "call/cc"を使って実装できますか?
4
A
答えて
7
あなたは、いくつか何かをテストして真実か偽かを判断する方法がありません。あなたはブーリアンの機能的な表現で近づくことができます。例えば、一般的な教会のエンコーディングを持つ:
(define (true x y) x)
(define (false x y) y)
、今あなたが「成功」の継続と「失敗」1を受け入れる関数として(これらのエンコードされたブール値の1を返す)テストを考慮することができる、と継続することを使用しています:あなたは物事をサンクする必要があるので、
(define (if c x y) (c x y))
あなたはこれを試してみたい場合は、あなたは、Schemeは怠惰な言語ではないという事実を考慮する必要があります。たとえば:
(define (true x y) (x))
(define (false x y) (y))
(define-syntax if
[(if c x y) (c (lambda() x) (lambda() y))])
(。しかし、あなたはまだこれらのブール値を返すために、既存の述語などを修正する必要があります)
いずれかの方法で、それ自体がcall/cc
は本当に関連何もしていません...
2
高位手順のみを使用しての場合を実装できます。これは、教会のコード化されていない明らかな教会です:
IF ? T E === (? (lambda() T) (lambda() F))
TRUE === (lambda (t _) (t))
FALSE === (lambda (_ f) (f))
あなたは継続が全く必要ありません。 Trueは、最初の引数を実行するバイナリ関数です。 Falseは2番目の引数を実行するバイナリ関数です。 Ifは、テスト(?)によって決定されたTrue/Falseを取得し、結果を遅らせる2つの関数を与えることによって、それらを一緒に並べる3次関数です。
関連する問題
- 1. "IF"を使ってmysql文を開始できますか?
- 2. UDPを使ってackを実装していますか?
- 3. rubyのcallccが無限ループを引き起こしますか?
- 4. FileStreamを使用してファイルロックを実装できますか?
- 5. JavaScriptを使用してWindowsエクスプローラを実装できますか?
- 6. firebaseを使用してアクティビティトラッカーを実装できますか?
- 7. TYPO3テンプレート構文を使用してif/elseを実装する
- 8. MySQLを使って投票や「好き」を実装する
- 9. Hazelcast Opensourceでカスタムセキュリティ実装を実装できますか?
- 10. std :: maxの実装でif-elseを使用する理由
- 11. Paramikoを使ってPythonでsshを使って対話型シェルを実装しますか?
- 12. PyJniusを使ってPythonからJavaインターフェイスを実装する
- 13. jekyllタグ内にifを実装する
- 14. どうやってテールを効率的に実装できますか?
- 15. どうやってこれをRailsに実装できますか?
- 16. 誰もMonoTouchを使って同等のStackPanelを実装していますか?
- 17. socket.ioを使ってアンドロイドでインスタントメッセージングを実装する方法は?
- 18. クラスのArrayListを使ってSpringでCRUDを実装する
- 19. 原子変数を使ってJavaでミューテックスを実装する
- 20. Cでセマフォーを使ってダミープログラムを実装する
- 21. three.jsでクッキーを使ってプロジェクターを実装するには?
- 22. ツールバーでQTextEditを使ってエディタを実装する方法
- 23. JBoss Infinspanを使ってApache Shiroでキャッシングを実装する
- 24. Cでmallocを使ってaligned_mallocを実装する
- 25. スレッドモジュールを使ってPythonでスレッドを実装する
- 26. マルチプロセッシングを使ってPythonで関数を実装する
- 27. HTMLを使ってモバイルSafariでUIPickerviewを実装する
- 28. エリクシールでエージェントを使ってプロトコルを実装する
- 29. IQueryableでmultilpe EFエンティティを使用してページングを実装できますか?
- 30. if-elseの実装方法
私はあなたができるとは思わなかった。ブール値を関数として定義すると、ブール演算子を再定義する必要があるような方法で言語のセマンティクスが変更されます。これは、Schemeではすべての関数がブール値とみなされるとfalseでないためです。 – N4tur41Myst1c
はい、そのような変更は異なる言語になります...それが私が「あなたができない」から始まった理由です。 –