List.fold_left2を使用して、リストが回文であるかどうかを確認する関数があります。(フォールドの使用はオプションではありません。これは宿題の問題です。)
let is_p lst =
List.fold_left2 (fun acc e1 e2-> if (e1=e2) then acc else false) true lst (List.rev lst)
しかし、私はそれを最適化したいと思います。不一致が1つ見つかったらすぐに「false」を返す最良の方法は何ですか?
例外をスローしたくないのですが、それが最善の答えかもしれないと思います。また、匿名関数を次のように変更することも検討しました。
fun acc e1 e2-> if (not acc) then false else (if (e1=e2) then acc else false)