草庐IT

java - 在 Java 中模拟 ADT

应用程序可以在两种模式下运行-“实时”模式(它查看世界状态的每次更新)或“采样”模式(它仅每T毫秒查看一次世界状态)。如果我正在编写Haskell(或任何带有ADT的语言),我会将其建模为dataMode=RealTime|SampledInt可以以类型安全的方式如下使用casemodeofRealTime->--dorealtimestuffSampledinterval->--dosamplestuffwith'interval'我说它是“类型安全的”,因为如果您在实时模式下运行,您将无法尝试访问interval字段(它仅在您运行时提供)如果您在采样模式下操作,则需要它)。如何以类

java - 我需要了解 Haskell 如何表示数据才能编写好的 Haskell 程序吗?

我是从Java背景开始学习Haskell的。当我编写Java程序时,我觉得我对对象在内存中的布局方式及其后果有着深刻的理解。例如,我确切地知道java.lang.String和java.util.LinkedList是如何工作的,因此我知道我应该如何使用它们。对于Haskell,我有点迷路了。例如,(:)是如何工作的?我应该关心吗?是否在某处指定? 最佳答案 简短的回答是否定的。在Haskell中编程时,您应该将数据结构视为纯数学对象,而不用担心它们在内存中的表示方式。这样做的原因是,在没有副作用的情况下,除了创建数据的函数和可用于

java - 这个 Haskell 函数的 Java 等价物是什么?

PhilipWadler的论文“Monadsforfunctionalprogramming”有一个函数eval的例子,它执行用Haskell编写的除法。这是改编自GrahamHutton的“ProgramminginHaskell”:dataExpr=ValInt|DivExprExpreval::Expr->Inteval(Valn)=neval(Divxy)=evalx`div`evaly我的Java等价物是:abstractclassIntegerExpression{abstractIntegerevaluate();}classValueextendsIntegerExpr

java - Java 中的 Haskell 风格内存

我知道这是异端邪说,但我试着翻译了来自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++ - 在 Haskell 中移动或复制(相对于 C++)

以这两个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

c++ - 使用 O(1) 元素访问在 Haskell 中实现高效的类似 zipper 的数据结构

问题我想创建一个数据类型,允许快速访问和修改其元素。是否可以在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:

c++ - Haskell 堆栈设置 - 无法识别 CPP 程序

我正在学习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

c++ - C++ "type deduction"和 Haskell "type inference"有什么区别?

在英语语义中,“typededuction”等于“typeinferring”吗?我不确定这只是不同语言设计者选择的成语偏好,或者计算机科学给出了严格的“类型推导”定义,哪个不是“类型推断”?谢谢。 最佳答案 C++规范和工作草案广泛使用“类型推导”来指代没有类型声明作为引用的表达式类型;例如thisworkingdraftonconcepts在谈论auto声明的变量时使用它,我记得很多书在谈论模板时都使用它,那时候我不得不学习——然后忘记了大部分——C++。Typeinference但是,它有自己的维基百科页面,也是编程语言理论中

C++ 单子(monad)库

有谁知道C++中的一个好的monad模板库。也许,它提供了一些您会在Haskell中看到的常见单子(monad),例如Maybe。 最佳答案 类似Maybe的东西可以在Boost.Optional中找到. 关于C++单子(monad)库,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/5448162/

c++ - "True Polymorphism"的例子? (最好使用 Haskell)

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我见过很多“真正的多态性”的部分定义,例如here和here但我在任何地方都找不到两个具体示例的区别的明显示例。我知道重载+运算符是某种形式的多态性,它在Haskell和C++中的实现方式不同。有人可以准确地说明两种语言的例子有什么不同吗?