我正在尝试将一个简单的Haskell数据类型和一个函数转换为OO。但是我很困惑..具有以下用于算术计算的Haskell类型:dataExpr=LitInt|AddExprExpr|derivingShow--TurntheexprtoanicestringshowExpr::Expr->StringshowExpr(Litn)=shownshowExpr(Adde1e2)="("++showExpre1++"+"++showExpre2++")"现在我正在尝试转换..publicinterfaceExpr{StringshowExpr(Stringn);}//Basecasepubli
这个问题在这里已经有了答案:HowtoreducegivenlistbyusingLambdaexpression.reduce()method(2个答案)关闭7年前。我们习惯了foldr在Haskell中你使用(例如,使用Java语法)aList并返回所需的任何类型(、List等)。例如在Haskell中,这个函数接受List并返回另一个List并用作累加器aList(只是一个例子,函数的目标无关紧要):evens::[Integer]->[Integer]evens=foldr(\xacc->ifmodx2==0thenx:accelseacc)[]现在Java8已经推出并具有函数
我遇到了以下问题:我有一个不同类的对象树,其中子类中的操作使父类无效。在命令式语言中,这是微不足道的。例如,在Java中:publicclassA{privateListm_children=newLinkedList();privatebooleanm_valid=true;publicvoidinvalidate(){m_valid=false;}publicvoidaddChild(Bchild){m_children.add(child);child.m_parent=this;}}publicclassB{publicAm_parent=null;privateintm_da
我正在将Java应用程序移植到Haskell。Java应用程序的主要方法遵循以下模式:publicstaticvoidmain(String[]args){if(args.length==0){System.out.println("Invalidnumberofarguments.");System.exit(1);}SomeDataTyped=getData(arg[0]);if(!dataOk(d)){System.out.println("Couldnotreadinputdata.");System.exit(1);}SomeDataTyper=processData(d);
我是从Java背景开始学习Haskell的。当我编写Java程序时,我觉得我对对象在内存中的布局方式及其后果有着深刻的理解。例如,我确切地知道java.lang.String和java.util.LinkedList是如何工作的,因此我知道我应该如何使用它们。对于Haskell,我有点迷路了。例如,(:)是如何工作的?我应该关心吗?是否在某处指定? 最佳答案 简短的回答是否定的。在Haskell中编程时,您应该将数据结构视为纯数学对象,而不用担心它们在内存中的表示方式。这样做的原因是,在没有副作用的情况下,除了创建数据的函数和可用于
PhilipWadler的论文“Monadsforfunctionalprogramming”有一个函数eval的例子,它执行用Haskell编写的除法。这是改编自GrahamHutton的“ProgramminginHaskell”:dataExpr=ValInt|DivExprExpreval::Expr->Inteval(Valn)=neval(Divxy)=evalx`div`evaly我的Java等价物是:abstractclassIntegerExpression{abstractIntegerevaluate();}classValueextendsIntegerExpr
我知道这是异端邪说,但我试着翻译了来自http://www.haskell.org/haskellwiki/Memoization的例子到java。到目前为止,我有:publicabstractclassF{publicabstractBf(Aa);}...publicstaticFmemoize(finalFfn){returnnewF(){privatefinalMapmap=newHashMap();publicBf(Aa){Bb=map.get(a);if(b==null){b=fn.f(a);map.put(a,b);}returnb;}};}//usage:privatec
以这两个C++函数和示例用法为例:vectormakeVect(){vectorv={1,2,3};returnv;}//usageautov=makeVect();//vectorismovedvoidaddFour(vector&v){v.push(4);}//usageaddFour(v);//vispassedinasreference两种情况下都不会发生复制。这真的很有效。对应的Haskell函数和用法如下:makeVect::(Numa)=>[a]makeVect=[1,2,3]--usage--Q1:is[1,2,3]copiedormovedtov?letv=makeV
问题我想创建一个数据类型,允许快速访问和修改其元素。是否可以在Haskell中创建一个结构和函数,其执行速度与简单的C++实现一样快?问题详情我正在用Haskell编写一个编译器。我有AST由数据类型表示,让我们考虑以下一个:importPreludehiding(id)--thisisasampledatatype,therealonehasgotalotofconstructorsdataAST=A{id::Int,x::AST,y::AST,z::AST}|B{id::Int}|C{id::Int,x::AST,y::AST}|D{id::Int,u::AST,v::AST,w:
我正在学习UdemyHaskell类(class),该类(class)曾显示我可以使用Stack选项下载Haskell。我已经配置了我的$PATH并在遇到问题时运行堆栈设置。configure:WARNING:configurecan'trecognizeyourCPPprogram,youmayneedtoset--with-hs-cpp-flags=FLAGSexplicitlyconfigure:error:in`/Users/Dylan/.stack/programs/x86_64-osx/ghc-8.0.2.temp/ghc-8.0.2':configure:error:Cc