[解決済み] OCamlにおける`and`キーワードの意味とは?
2022-03-06 15:36:53
質問
が謎なんです。
and
というキーワードがOCamlにあります。を通して見ると
このコード
を見ると
type env = {
(* fields for a local environment described here *)
}
and genv {
(* fields for a global environment here *)
}
では 後 ,
let rec debug stack env (r, ty) = (* a function definition *)
and debugl stack env x = (* another function definition *)
どうなっているんだ?は、どうなっているのでしょうか?
and
キーワードは、単に最後の
type
,
let
または
let rec
ステートメントを使用しますか?のようなものがあるのでしょうか?
and rec
ステートメントが必要ですか?なぜ
and
と入力するのではなく
let
または
type
リファクタリングに対して脆弱なコードにならないか?他に何か知っておくべきことはありますか?
どのように解決するのですか?
その
and
キーワードは、複数の
let
(最初の例では、私はこのために使ったことはありませんが、なぜでしょう) または、型、関数、モジュールなどの定義を相互に再帰的に行う場合です。
2番目の例でわかるように :
let rec debug stack env (r, ty) =
...
| Tunresolved tyl -> o "intersect("; debugl stack env tyl; o ")"
...
and debugl stack env x =
...
| [x] -> debug stack env x
...
debug
コール
debugl
であり、その逆もまた然りです。ですから
and
がそれを可能にしている。
[EDIT] 適切な例を挙げないのが気になったので、よく見かける例を一つ紹介します。
let rec is_even x =
if x = 0 then true else is_odd (x - 1)
and is_odd x =
if x = 0 then false else is_even (x - 1)
(この例では ここで )
相互に再帰的な型については、設定を見つけるのが難しいですが、次のようにします。
このウィキペディアのページ
を定義します。
trees
と
forests
を次のようにします。
type 'a tree = Empty | Node of 'a * 'a forest
and 'a forest = Nil | Cons of 'a tree * 'a forest
例として、空の木、ラベルの付いた単木からなるフォレスト
a
というラベルを持つ2ノードツリー
b
と
c
のように表現されます。
let f1 = Cons (Empty, (* Empty tree *)
Cons (Node ('a', (* Singleton tree *)
Nil), (* End of the first tree *)
Cons (Node ('b', (* Tree composed by 'b'... *)
Cons (Node ('c', (* and 'c' *)
Nil),
Nil)
),
Nil (* End ot the second tree *)
)
)
);;
そして、サイズ機能( フォレスト内のノード数を数える となります。
let rec size_tree = function
| Empty -> 0
| Node (_, f) -> 1 + size_forest f
and size_forest = function
| Nil -> 0
| Cons (t, f) -> size_tree t + size_forest f
そして、次のようになります。
# size_forest f1;;
- : int = 3
関連
-
[解決済み] にはどんな意味があるんだろう?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] パラメータに**(ダブルスター/アスタリスク)、*(スター/アスタリスク)がありますが、これはどういう意味ですか?
-
[解決済み] なぜ ++[[]][+[] +[+[]] は "10" という文字列を返すのでしょうか?
-
[解決済み] C言語における「static」の意味とは?
-
[解決済み] PHPの文字列で、シングルクオートとダブルクオートの違いは何ですか?
-
[解決済み] Pythonの "at"(@)マークは何をするものですか?
-
[解決済み] .の違いは何ですか?(ドット)と$(ドルマーク)の違いは何ですか?
-
[解決済み] 関数呼び出しにおけるstarとdoublestarの演算子の意味は?
-
[解決済み] Rubyのmap(&:name)ってどういう意味?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] どなたか説明してください - for (int i = 0; i < 8; i++) [closed].
-
[解決済み] twigで文字列を連結する方法
-
[解決済み] にはどんな意味があるんだろう?
-
[解決済み] 文の前の感嘆符(!)は何を意味するのですか?重複
-
[解決済み] Markdownのコメント
-
[解決済み] IFステートメントを使用しているときに、シェルコマンドを複数行に分割するにはどうすればよいですか?
-
[解決済み】PowerShellで"&&"や"-and "を動作させることはできますか?
-
[解決済み] 様々な言語のコードをシンタックスハイライトするためのLaTeXパッケージ
-
[解決済み] プログラミング言語における文法と意味の違いは何ですか?
-
[解決済み] Kotlinの変数名前アスタリスク演算子またはSpread演算子