--- breaks: false tags: public-tech --- # 2 つの式を `;` でつないで逐次実行する この記事は [OCaml Tips Advent Calendar 2022](https://adventar.org/calendars/8396) の17日目です。 OCaml で、まずひとつ目の式を実行し(例えば `print_string "Hello"`)、 続いて2つ目の式を実行したい場合(例えば `print_string "World"`)、 `let ... in` 式でつないで書くこともできますが、始めの式の戻り値の型が `unit` の場合は `;` でつないで書くことができます([Sequence](https://v2.ocaml.org/manual/expr.html#sss:expr-sequence))。 ```ocaml (* こう書いてもよいが、冗長 *) let () = print_string "Hello" in print_string "World" ;; (* こう書ける *) print_string "Hello"; print_string "World" ;; ``` 1つ目の式が `unit` を返さない場合でも、その実行結果が不要な場合は、 1つ目の式に`ignore` を使うことで `unit` を返すように整形してから `;` で つなぐことができます。この場合、演算子 `|>` や `@@` が便利です。 これらの演算子については [AdC 6 日目](https://hackmd.io/@anqou/HJl-dGhDi)の記事を参考にしてください。 ```ocaml (* 関数 f は unit 以外の値を返す関数とする *) (* こう書いてもよいが冗長 *) let _ = f () in (* 実行するが、結果は捨てる *) print_string "Hello world" ;; (* こう書ける *) ignore (f ()); print_string "Hello world" ;; (* 演算子 |> や @@ を使って見やすくできる *) ignore @@ f ();; f () |> ignore;; ``` ## ところで 昨日(16日)、[OCaml 5.0 がリリースされました](https://discuss.ocaml.org/t/ocaml-5-0-0-is-out/10974)! ついに OCaml でも(共有メモリを使う) 並列実行ができるようになったほか、エフェクトハンドラも導入されました。 これらについて、OCaml Tips AdC でも(最終週あたりで)触れられたらいいなと 思っています。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up