2016-12-06 105 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作为参数。

    无论如何,这些函数永远不需要改变其范围之外的变量,因为它们可以单独依赖返回值。