簡體   English   中英

OCaml中的遞歸幫助

[英]Recursion help in OCaml

我正在嘗試使用Ocaml進行遞歸函數處理,但是我不斷收到相同的錯誤代碼。

let rec get x =
if x > 7 then
get x-7;;

而且我得到了非常有用的錯誤消息:

錯誤:此表達式的類型為int,但應為單位類型的表達式

我是OCaml的一個完整的初學者,正在大學里學習它作為一個模塊。 這是我的任務之一,我有些困惑!

我本來想通過while循環來完成此操作(因為我是一個主要的命令程序員),但是我無法使其工作,所以我想嘗試遞歸!

謝謝

此代碼有兩個問題。 首先, x-7的間距表示您希望傳遞x - 7get ,但實際上它會被解析為(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.

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