[英]Recursion help in OCaml
我正在嘗試使用Ocaml進行遞歸函數處理,但是我不斷收到相同的錯誤代碼。
let rec get x =
if x > 7 then
get x-7;;
而且我得到了非常有用的錯誤消息:
錯誤:此表達式的類型為int,但應為單位類型的表達式
我是OCaml的一個完整的初學者,正在大學里學習它作為一個模塊。 這是我的任務之一,我有些困惑!
我本來想通過while循環來完成此操作(因為我是一個主要的命令程序員),但是我無法使其工作,所以我想嘗試遞歸!
謝謝
此代碼有兩個問題。 首先, x-7
的間距表示您希望傳遞x - 7
來get
,但實際上它會被解析為(get x) - 7
。 用括號很容易解決:
let rec get x =
if x > 7 then get (x - 7)
第二個問題是if
沒有第二條臂,因此該函數返回任何東西的機會不大。 ( if
將手臂設為unit
類型,則僅對效果有用。)
如果x
小於7,您可能想返回一些值,也許是:
let rec get x =
if x > 7 then get (x - 7) else x
可以使用while循環編寫此代碼,但是您應該了解OCaml中的變量不是可變的位置,而只是名稱。 您必須明確地引入和操作可變的位置:
let get x =
let y = ref x in
while !y > 7 do
y := !y - 7;
done;
!y
希望能有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.