[解決済み] OCamlにおける複数のif文の実装
2022-02-07 06:09:05
質問
私はOCamlの初心者ですが、自分の関数が複数の条件をチェックし、それらの条件のいずれかが真である場合に変数を変更する方法を見つけようとしています。
大まかな擬似コードは以下の通りです。
var list = []
if cond1 then 1::list
if cond2 then 2::list
etc
しかし、私が知る限りでは、一度if文に入ると、関数に値を返すまでその中に留まるようです。この制限を回避する方法はあるのでしょうか?私は言語を理解するのが大好きなので、あなたの時間に感謝し、ヒントやヒントは非常に高く評価されています。
どのように解決するのですか?
OCamlの変数は不変であり、その値を変更することはできません。だから、別の方法で考える必要がある。合理的な方法としては,与えられたリストの先頭に何かを追加したものを値とする関数を用意することです.
let f list =
if cond1 then 1 :: list
else if cond2 then 2 :: list
else 3 :: list
なお
if
OCamlでは、式、つまり値を持ちます。と似ています。
?:
C言語の影響を受けた言語における三項演算子。
このような関数を示すOCamlのセッションを紹介します。あくまで例で、これは便利な関数ではありません。
$ ocaml
OCaml version 4.01.0
# let f list =
if List.length list > 3 then 1 :: list
else if List.length list > 1 then 2 :: list
else 3 :: list ;;
val f : int list -> int list = <fun>
# f [];;
- : int list = [3]
# f [1;2];;
- : int list = [2; 1; 2]
更新情報
もし、常にifを適用したいのであれば、コードは次のようになります。
let f list =
let list' = if cond1 then 1 :: list else list in
let list'' = if cond2 then 2 :: list' else list' in
let list''' = if cond3 then 3 :: list'' else list'' in
list'''
繰り返されるパターンを独自の関数で捕捉することができます。
let f list =
let cpfx cond pfx l = if cond then pfx :: l else l in
cpfx cond3 3 (cpfx cond2 2 (cpfx cond1 1 list))
関連
-
[解決済み] 代入文の「others=>'0'」はどういう意味ですか?
-
[解決済み] 中括弧のないif文を使用するのは悪い習慣ですか?[クローズド]
-
[解決済み] バッチファイル:(この時点では想定外でした
-
[解決済み] SwiftのIF LETはどのように評価されるのですか?
-
[解決済み] cmake if else with option
-
[解決済み] 複数の変数が1つの値に対して等しいかどうかをテストするには?
-
[解決済み] AngularJS テンプレートにおける if else ステートメント
-
[解決済み] GoにはPythonのような "if x in "の構成がありますか?
-
[解決済み】「if」文が多すぎる?
-
[解決済み] IF」は高いのか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] OCamlにおける複数のif文の実装
-
[解決済み] Makefileの中で条件がある場合、ターゲット内部で
-
[解決済み] gitlabciでif-else条件を使用する方法
-
[解決済み] 代入文の「others=>'0'」はどういう意味ですか?
-
[解決済み] バッチファイル:(この時点では想定外でした
-
[解決済み] SwiftのIF LETはどのように評価されるのですか?
-
[解決済み] cmake if else with option
-
[解決済み] AngularJS テンプレートにおける if else ステートメント
-
[解決済み] Swiftでif文の中で複数のlet-asを使用する
-
[解決済み] ワンライナーでif else文を書くには?重複