Tag: haskell

Java中的ADT类多态(不改变类)

在Haskell中,我可以定义以下数据类型: data Tree = Empty | Leaf Int | Node Tree Tree 然后写这样的多态函数: depth :: Tree -> Int depth Empty = 0 depth (Leaf n) = 1 depth (Node lr) = 1 + max (depth l) (depth r) 在Java中,我可以使用接口模拟代数数据类型: interface Tree {} class Empty implements Tree {} class Leaf implements Tree { int n; } […]

使用Haskell将函数注入Java .class文件

我使用Haskell编写了一个Java字节码解析器,它运行得很好。 然而,下一步让我完全难过。 我的Haskell程序需要修改.class文件,以便在执行时,Java程序打印: “在执行方法之前输入[此处的方法名称] ”,和 执行方法后“ 退出[此处的方法名称] ”。 我所知道的是,我们需要通过调用System.out.println来附加常量池和方法表,但我觉得我仍然缺少一些东西。 解决这个问题的最佳方法是什么? 你怎么知道如何在字节码中调用System.out.println ? 如何使用方法名称存储字符串,以后将其作为System.out.println的参数调用?

为什么Haskell中的因子计算要比Java中快得多

我遇到的一个编程问题涉及计算大数的阶乘(数字高达10 ^ 5)。 我见过一个简单的Haskell代码,就像这样 factorial :: (Eq x, Num x) => x -> x factorial 0 = 1 factorial a = a * factorial (a – 1) 即使没有代码中涉及的任何缓存,它也会隐式处理大量数字并以某种方式运行得更快。 当我尝试使用Java解决问题时,我不得不使用BigInteger来保存大量数据并使用因子的迭代版本 public static BigInteger factorialIterative(int n) { if(n == 0 || n == 1) return BigInteger.valueOf(1); BigInteger f = BigInteger.valueOf(1); for(int i = 1 ; i <= […]

如何使用指向父级和子级的指针在Haskell中编写对象树?

我遇到了以下问题:我有一个不同类的对象树,其中子类中的操作使父类无效。 在命令式语言中,这样做很简单。 例如,在Java中: public class A { private List m_children = new LinkedList(); private boolean m_valid = true; public void invalidate() { m_valid = false; } public void addChild(B child) { m_children.add(child); child.m_parent = this; } } public class B { public A m_parent = null; private int m_data = 0; public void setData(int data) […]

如何在Haskell中为Java创建语法突出显示?

很快我将被迫在Haskell中展示一个应该使Java语法突出显示的项目。 我做了一些研究,我发现Happy可以是一个解决方案(因为它是一个类似yacc的解析器)。 还提到了Bison和Parsec。 由于我是Haskell的新手,我真的没有任何想法如何启动这个项目。 任何提示都会有所帮助。 谢谢!

为什么Haskell可以轻松处理非常大的数字?

Hugs> 94535^445 为什么Haskell可以计算如此大的数字,而其他语言(如Java)不能(如此容易)?

从Java中调用Haskell函数的最佳方法

我正在寻找一种从Java程序中执行Haskell函数的有效方法。 我已经考虑过使用exec()与GHC进行交互,但似乎应该有更好的方法。

Java和Haskell之间的通信

我用Google搜索并获得了一些答案,可以通过GCJNI(现在网站已关闭)和LambdaVM完成Java和Haskell之间的通信。要使用LambdaVM / GCJNI,我是否需要下载任何构建工具? 我在哪里可以了解更多关于它们的信息,因为我在网上找不到太多资源? 我想开发一个在Java和Haskell之间进行通信的应用程序(我将从Java获取输入,将其传递给Haskell并在那里处理并将结果返回给Java)。这就是我想要做的。 请帮帮我…