2017-02-24 66 views
1

我有一個ML編程任務,並在幾個函數中,保持計數是有用的。例如,在一個函數中,我需要返回一個元素出現的索引列表。我不知道如何在遞歸中跟蹤這些事情,因爲曾經的函數調用會殺死我的數量。在現實世界中,我會考慮計數變量,但這在學校中不是一種選擇。有小費嗎?我應該如何保持遞歸函數計數。沒有尾遞歸或額外參數

+1

爲什麼尾遞歸不是一種選擇? – Yawar

+2

您需要傳遞函數所需的信息以完成其工作。爲什麼你不能創建具有額外參數的輔助函數?這樣的事情通常在ML中完成。輔助函數的定義可以完全侷限於函數(使用'let fun ... in ... end'),所以在這個意義上,整體函數不會被任何額外的參數所混淆。 –

+0

@Yawar,老師下訂單。 –

回答

2

如果你可以使用幫助函數,你基本上可以使用尾遞歸。你的老師不會給你,強迫你使用比純遞歸其他技術

模式具有這些功能通常是遞歸的問題:

fun outer list = 
    let 
    fun inner param inner_list = 
     (* use tail recursion here *) 
    in 
    inner initial_param list 
    end 
+0

我會用let,in,end來解決至少一個問題。 順便說一句,我嫉妒你得拿杯子!謝謝你的幫助。 –

+0

乾杯對不起,只是修正了語法。當我最初寫這篇文章時,我可能正在考慮OCaml。 – Yawar