2016-12-06 104 views
-5
  1. 我的練習給了我這個作爲原始編碼。
  2. 然後,他們希望我們做一個java實現它。
  3. 我以爲我現在無法理解它。
  4. 這裏有一個地方使用了一個變量「n」,它以某種方式將它全部加起來。
  5. 這是我真正的問題,除非有更多的可以調試。
  6. 我只是想在下週最後一次學習這些東西。如何在Java中編寫ML程序?使用嵌套函數

    fun f x y = 
        let 
         val a = x+1 
         fun g 0 = 0 
         | g n = 
          let 
           val a = x+y 
           fun h 0 = 0 
           | h k = a+n+g(n-1) 
          in 
           h (n-1) 
          end 
        in 
         if x = 0 
         then g y 
         else a + g(f (x-1) y) 
        end 
    
  7. 這是我嘗試的程序。

  8. 我應該實現的ML代碼的原始版本在上面。

    public class f { 
        static double k; 
        static double x; 
        static double y; 
        static double a, a2; 
        static double n; 
    
        public static double fn(double x, double y) 
        { 
         a = x + 1; 
         if(x == 0) 
          g(y); 
         return a + g(fn((x-1), y)); 
        } 
    
        public static double g(double n) 
        { 
         if(n == 0) 
          return 0; 
         a2 = (x + y); 
         f.n = h(n-1); 
         return f.n; 
        } 
    
        public static double h(double k) 
        { 
         if(k==0) 
          return 0; 
         else 
         { 
          k = a2 + n + g(n-1); 
          return k; 
         } 
        } 
    
        public static void main(String[] args) 
        { 
         /*double arg2[] = null; 
         for (int i = 0; i < args.length; i++) { 
          arg2[i] = Double.parseDouble(args[i]); 
         }*/ 
         fn(2,1); 
        } 
    } 
    
+1

你想做什麼?有什麼問題?請在提問時具體明確。 – progyammer

+0

我不太清楚程序應該做什麼。要麼我在我的一個班級學習ML,這只是一個應該幫助我的練習,但它讓我更加困惑。 –

+0

你是什麼意思你想用Java編寫一個ML程序?你想把ML代碼翻譯成Java嗎? – EJoshuaS

回答

2

問計於StackOverflow的功課幫助是一個敏感的話題,這可能是爲什麼你得到了所有的downvotes的原因。請參閱this guide對於提問者的某些期望:

  • 做一個真誠的嘗試,首先自己解決問題。
  • 詢問您現有實施的具體問題。
  • 承認問題是作業。
  • 請注意學校政策。 (我至少懷疑這一點)
  • 永遠不要使用你不明白的代碼。 (待觀察樹葉。)□

如何用Java編寫的程序ML?

你......不。你可以編寫一個ML程序,或者編寫一個Java程序。

將這個ML程序轉換成Java程序並不是微不足道的,因爲ML程序使用嵌套的作用域,這在Java代碼中有點不典型。爲了演習的目的,這被誇大了。

以下是一些建議:

  1. 不要使用靜態變量的部分:

    static double k; 
    static double x; 
    static double y; 
    static double a, a2; 
    static double n; 
    

    他們不符合得非常好ML的lexical scoping,和你的風險予以更新來自錯誤的範圍。

  2. 您可以在Java中使用lambda表達式的詞法範圍。這對於Java來說不是慣用的,但它會使翻譯更加直接。

  3. 您可以使用額外的函數參數將外部函數的參數傳遞給內部函數。例如。讓功能gxy作爲參數,並讓功能hx,yn作爲參數。

    無論如何,這些函數永遠不需要改變其範圍之外的變量,因爲它們可以單獨依賴返回值。