回覆列表
  • 1 # 使用者7035259253219

    有非常細微的區別。

    簡單理解的話,兩者都是構造了一個自我引用的thunk,在惰性求值的情況下他們都會不停的執行下去。

    但是當考慮到實際執行在真實的機器上的時候,他們之間會有非常細微的差別。GHC 在編譯的後期(生成 Native code 之前)會使用 STG 作為中間表示。在 STG 中,前者每次 force 的時候會多產生一次 apply 也就會多一次壓棧的操作,而後者則不會。理論選一個合適的 f 可以使前者 stack overflow 而後者則不會。

    題主可以試一下:

    更一般的,這兩者的區別可以歸納為recursion (data) v.s. corecursion (codata),題主有興趣的話可以看一下我貼的相關連結。

    延申:

    [1]: STG

    [2]: Data and codata

    [3]: Corecursion on wikipedia

  • 2 # 使用者4155342772864

    不知道f(x)的解析式是不好轉化的。

    f(x)=x ln(f(x)=lnx f(lnx)=lnx lnf(x)=f(lnx) f(x)=x² ln(f(x))=2lnx→x=e^ln(f(x))/2 f(lnx)=ln²x=→x=e^(√flnx) ln(f(x))=2√flnx 如問的是lnf(x)與f(lnx)出解析式如何寫: 以f(x)=sinx為例: ln(f(x))=ln[sin(x)] f(lnx)=sin[ln(x)] 再如: f(x)=x²+x ln(fx)=ln(x²+x) f(lnx)=ln²x+lnx

  • 中秋節和大豐收的關聯?
  • 四史名人故事?