[英]Reversing a list in OCaml with recursion
我正在研究一種在 Ocaml 中反轉列表的算法:
let rec reverseList list revList=
match list with
| [] -> revList
| h::t -> reverseList t revList@[h]
一個使用示例是:
let list = [1;2;3;4];;
reverseList list [];;
我想知道為什么會這樣。 據我了解,如果我們反轉上面定義的列表,我們將查看 function 調用:
reverseList [1;2;3;4] []
reverseList [2;3;4] [1]
reverseList [3;4] [1;2]
reverseList [4] [1;2;3]
reverseList [] [1;2;3;4]
這將返回 [1;2;3;4]。 但是,此代碼有效。 那么為什么它有效,為什么不是最后一行
| h::t -> reverseList t [h]@revList
我有一種暗示它與咖喱有關,但我不太了解它。 請幫忙!
表達方式:
reverseList t revList@[h]
解析如下:
(reverseList t revlist) @ [h]
換句話說,它首先遞歸地反轉尾部,然后將新元素添加到末尾。 這確實有效(盡管它不是反轉列表的有效方法。)
另請注意, revList
參數絕不是空列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.