我正在自學OCaml,而我用於練習的主要資源是Cornell從他們的3110課程中提供的一些問題集。其中一個問題是編寫一個反轉int的函數(即:1234→4321,-1234→-4321,2→2→-10→-1等)。顛倒OCaml中的int
我有一個有效的解決方案,但我擔心,這不完全是地道的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
它可以正常工作在所有情況下,據我所知道的,但它只是似乎嚴重「 un-OCaml「給我,特別是因爲我用兩個內部函數遍歷整個int長度。所以我只是想知道是否有更多的「OCaml」方式來做到這一點。
爲什麼不是int - > string - > char數組 - >顛倒的char數組 - > string - >顛倒的int?這不是OCaml,但是我在SML/NJ中做了類似的事情(使用內爆和爆炸哪些OCaml似乎缺少),同時玩弄https://en.wikipedia.org/wiki/Lychrel_number。在函數式編程中將簡單的轉換鏈接在一起是相當習慣的。這可能需要對數據進行多次傳遞,但「避免過早優化」在學習語言時是很好的建議。 –
我沒有看到任何關於您的解決方案的單一性。可能有一些更聰明的解決方案,但這是一個不同的問題。 –