問題タブ [mutual-recursion]
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.
f# - これらのF#関数を意味のあるものに並べ替えるにはどうすればよいですか?
Haskellでまともなので、F#でうまくやっていくと思っていましたが、単純な問題に悩まされているような気がします。次のような単純なJSONパーサーの解析コードがあります。
parseObjectはparseValueを認識していないため、これは機能しません。それらを元に戻すことはできません。さもないと、逆の問題が発生します。それで、私はここで何をすべきでしょうか?
.net - 相互に依存し、別々のファイルで定義されるタイプを定義することは可能ですか?
拡張された解析機能を備えたライブラリを実装しようとしています。大学で知っていたので、fsyaccを使うことにしました。残念ながら、次の問題が発生しました。
文法の先頭(Head)のクラスを定義し、その実装を1つのファイルに配置しました。次に、パーサーを次のように定義しました。
Fsyaccは、分離されたモジュール(パーサー)を生成します。成功するには、次の順序でコンパイルする必要があります。Head.fs
Parser.fs
このライブラリを.NETにあるものと同様にするために、静的な解析メソッドをHeadに追加したいと思います。残念ながら、Parserモジュールのメソッドを使用する必要があります。
このような型の依存関係は'および'演算子で解決できることは知っていますが、1つのファイルで定義された型にのみ適用できます。
別々のファイルにある場合でも、相互に依存する型を作成する他の方法はありますか?C / C ++のような宣言/実装分離メカニズムを探していましたが、何も見つかりませんでした。
f# - 相互再帰型を整理する
相互再帰型([<Struct>]
)を異なるファイルに分散させることは可能ですか?タイプは名前空間の直下にあります。
私の解決策は、それらを1つの大きなファイルに入れて、type ... and ... and ... etc
構築を使用することです。それが唯一の方法ですか?
javascript - 単純な JavaScript 関数定義の問題
問題は、First() が定義されているときに、Second が定義されていないというエラーが発生することです。これはどのように解決できますか?
module - OCamlの相互再帰モジュールで署名が必要なのはなぜですか?
OCamlで相互再帰的なモジュール定義を使用する場合は、ファイル内であっても署名を付ける必要があり.ml
ます。.mli
これは、署名を2回繰り返すことになり、から特定のインターフェイスを公開したいという煩わしさです。:(!
これは私が行っていることの大まかな概算です(Client
タイプオブジェクトはServer
それらをインスタンス化したものを知っています。sはそれらをServer
知っていますClient
)。
もちろん、署名はで繰り返されます.mli
。なぜこれが必要なのですか?
(注:私は文句を言っていませんが、実際には、型理論または「ハードコンパイラの問題」に関連する理由があるかどうかを知りたいです。)
recursion - 相互再帰関数の不動点コンビネータ?
相互再帰関数のタプルを作成するための固定小数点コンビネータはありますか?つまり、Y-Combinatorのようなものを探していますが、複数の「再帰的」*関数を取り、関数のタプルを返しますか?
*:もちろん、通常のY-Combinatorの方法で、自分自身(および兄弟)を引数として取るように記述されているため、実際には再帰的ではありません。
java - 相互再帰問題
相互再帰的な 2 つの関数を相互に変更して線形再帰にするにはどうすればよいですか? 1 つのメソッドに両方のメソッドを含める必要がありますか?
haskell - 相互再帰を理解できません
私はHaskellでのプログラミングを読んでいます.8章で、著者はパーサーを書く例を挙げています。完全なソースはここにあります: http://www.cs.nott.ac.uk/~gmh/Parsing.lhs次
の部分が理解できません: のmany
0 個以上のアプリケーションを許可しますが、少なくとも 1 つの成功したアプリケーションが必要です:p
many1
再帰呼び出しがどのように発生するか
vs
は の結果値ですがmany p
、多くの p が呼び出され、その定義にはmany1 p
すべてdo 記法があり、再び結果値 があります。そして、再帰呼び出しはいつ戻るのでしょうか? 次のスニペットが返されるのはなぜですか?many1
v
vs
[("123","abc")]
c++ - 誰かがこの出力を私に説明できますか?
そこで、2つの関数が相互に再帰的になるとどうなるかを想像する思考実験をいじっていました。そのようなものの1つは、両方の関数が無限ループに陥る可能性がある場合はどうなるかということです。
そのために、私はこの簡単な例を考えました。
興味深いことに、g ++でコンパイルした場合、これは実際にはまったく何も出力しません。-Oスイッチを使用してコンパイルすると、無限ループに陥ります。
考え?これは潜在的にコンパイラのバグですか、それとも予想されることですか?-O最適化の場合、foo(x)とbar(x)がxだけを返すことがわかります。
実際に呼び出しを「最適化」して、標準入力への「値は」の出力を完全に無視するとは思っていませんでした。
編集:GCC 4.5.0を使用してCygwinで、これをg ++ source.cpp(-O1 / 2/3)としてコンパイルしました。-OXバージョンは、実際にはスタックがオーバーフローすることなく無限にループします。
f# - F#:型と関数間の相互再帰は可能ですか?
キーワードを使用して、and
相互に再帰的な関数定義を設定できます。相互再帰型にも使用できますand
が、型と関数の間に相互再帰関係がある場合はどうなるでしょうか。関数を型のメンバーにする唯一のオプションですか、それともここに似たものを使用できand
ますか?
編集:私がやろうとしていることを説明したいと思う単純化された疑似例を追加する
したがって、再帰的な関係がかなり間接的に設定されていることがわかります: MethodDef <-> AbstractInst AND MethodDef -> toAbstractInst -> AbstractInstruction (ここで、-> は「依存」を意味します)