gpt4 book ai didi

functional-programming - 在 OCaml 中反转 int

转载 作者:行者123 更新时间:2023-12-04 19:03:20 25 4
gpt4 key购买 nike

我正在自学 OCaml,我用于练习的主要资源是康奈尔大学从他们的 3110 类(class)中提供的一些问题集。问题之一是编写一个函数来反转 int(即:1234 -> 4321、-1234 -> -4321、2 -> 2、-10 -> -1 等)。

我有一个可行的解决方案,但我担心它不是完全惯用的 OCaml:

let rev_int (i : int) : int =
let rec power cnt value =
if value / 10 = 0 then cnt
else power (10 * cnt) (value/10) in
let rec aux pow temp value =
if value <> 0 then aux (pow/10) (temp + (value mod 10 * pow)) (value / 10)
else temp in
aux (power 1 i) 0 i

据我所知,它在所有情况下都能正常工作,但对我来说,它似乎是严重的“非 OCaml”,特别是因为我用两个内部函数遍历了 int 的长度两次。所以我只是想知道是否有更“OCaml”的方式来做到这一点。

最佳答案

我想说的是,以下内容已经足够地道了。

(* [rev x] returns such value [y] that its decimal representation
is a reverse of decimal representation of [x], e.g.,
[rev 12345 = 54321] *)
let rev n =
let rec loop acc n =
if n = 0 then acc
else loop (acc * 10 + n mod 10) (n / 10) in
loop 0 n

但正如杰弗里在评论中所说,你的解决方案非常地道,虽然不是最好的。

顺便说一句,我自己的风格是这样写的:
let rev n = 
let rec loop acc = function
| 0 -> acc
| n -> loop (acc * 10 + n mod 10) (n / 10) in
loop 0 n

因为我更喜欢模式匹配 if/then/else .但这是我个人口味的问题。

关于functional-programming - 在 OCaml 中反转 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31369790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com