簡體   English   中英

使用遞歸反轉 OCaml 中的列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM