作者聲稱下一次調用不是遞歸調用,但我不明白爲什麼。爲什麼作者聲稱這個函數調用不是遞歸調用?
來源:http://courses.cms.caltech.edu/cs11/material/haskell/lectures/haskell_lecture_5.pdf
作者聲稱下一次調用不是遞歸調用,但我不明白爲什麼。爲什麼作者聲稱這個函數調用不是遞歸調用?
來源:http://courses.cms.caltech.edu/cs11/material/haskell/lectures/haskell_lecture_5.pdf
代碼是遞歸(它是在其本身來定義)。我相信@ leftroundabout關於函數的重點的想法是準確的。下一張幻燈片說
do putY (y - x)
gcdST
是
Recursive data definition
* not recursive function call
* like ones = 1 : ones
即沒有遞歸函數調用,因爲gdcST
不是函數(它不需要參數!)。這是一個遞歸數據定義。
「遞歸數據定義」對我來說是新的。但是嚴格來說,這是一種功能,不是嗎?我的意思是,它被聲明爲一個函數,並在每次調用時執行計算。 –
@LayGonzález不,它不是一個函數 - 它不需要任何參數。在Haskell中,只有在類型中具有' - >'的情況下,才能使用這些值。而且,就像幻燈片所說的那樣,沒有「呼叫」 - 因爲沒有功能。它只執行計算,就像'ones = 1:ones'中'ones'的第二次發生執行計算產生一個列表。它確實評估價值,這是正確的。 –
好的!現在很清楚。謝謝。 –
我覺得應該把重點放在「功能」上。它確實足夠遞歸,只有'gcdST'不是一個函數。 – leftaroundabout