我想寫一個函數rotate n l
,它返回一個新列表,其中包含與l
相同的元素,「旋轉」n
倍到右側。例如,OCaml中的旋轉列表
rotate 0 [1;2;3;4]
應該返回[1;2;3;4]
rotate 1 [1;2;3;4]
應該返回[4;1;2;3]
rotate 2 [1;2;3;4]
應該返回[3;4;1;2]
rotate 3 [1;2;3;4]
應該返回[2;3;4;1]
rotate 4 [1;2;3;4]
應該返回[1;2;3;4]
等
的rotate n
用於n
小於0的行爲應該是相同n
等於0 我想寫這不使用列表連接操作符@
從Pervasives
。
更新:這裏是旋轉功能我寫道:
let rot1 l =
let rec iterate acc = function
[] -> []
| [x] -> x :: List.rev acc
| x :: l -> iterate (x :: acc) l
in
iterate [] l;;
但我想它做同樣的事情,而無需使用List.rev
。 有沒有辦法做到這一點?
這看起來非常像功課。除非你展示一些你已經嘗試過的代碼,並描述如何以及爲什麼它不起作用,否則只有給你答案很難。 – 2013-03-26 01:17:30