Questions tagged «haskell»

一种功能编程语言

2
为什么不像Haskell那样将Scala Option类型称为Maybe?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 为什么不像Haskell那样将Scala Option类型称为Maybe? 也许对我来说更具“语义意义”,但也许Option具有我所不知道的不同行为。 有什么特殊的原因为什么不将Scala中的Option称为Maybe?

5
与构造函数相反的函数的正确术语是什么-从数据类型中解包值?
编辑:我改一下这个问题。显然,我引起了一些混乱,因为我没有意识到在OOP中使用析构函数一词是因为它们完全不同-它是在销毁对象时调用的函数。在函数式编程中,我们(尽量)避免发生可变状态,因此没有这种等效状态。(我在问题中添加了适当的标签。) 相反,我已经看到用于解开值的记录字段(尤其是用于newtypes的单值数据类型)有时称为destructor或deconstructor。例如,让我们(在Haskell中): newtype Wrap = Wrap { unwrap :: Int } 这Wrap是构造函数,unwrap是什么? 问题是: 我们如何unwrap在函数式编程中调用?解构器?破坏者?或其他术语? 并澄清一下,这个/其他术语是否适用于其他功能语言,还是仅在Haskell中使用? 或许,在非功能性语言中,对此是否有通用的术语? 我看过两个词,例如: ...通常,一个人为这些提供聪明的构造函数和析构函数以简化与它们的合作。... 在Haskell Wiki上,或 ...这里的一般主题是融合构造函数- 像...这样的解构函数对 在Haskell Wikibook上(这里的含义可能更笼统),或者 newtype DList a = DL { unDL :: [a] -> [a] } 该unDL功能是我们的解构,从而消除了DL构造。... 在现实世界中的Haskell。

2
如何处理技术“独断论”
我离开了一份工作(搬到另一个国家),大部分时间我都使用Javascript和Haskell(某些python)进行编程。我真的很喜欢它,因为人们是客观,积极,数学的,却做了很多事情。这是一家真正的专业商店。 现在,我在一家敏捷/ XP商店工作。虽然这很好,但我觉得在选择技术和库时也许我们并不专业。我觉得我们编写软件的方法还有些不成熟且没有结构。我正在尝试阅读我提供的书籍,它们似乎鼓励这种风格(ugh)。很多时候,我们只是从git hub中摘取libs并使用它,而没有进行任何类型的审查。 即使对一个人来说这是一件小事,我也总是被迫与某人一起工作。即使规则可以被琐碎的反例破坏(每次我都误以为给出反例而被口头攻击),似乎所有事情都有一条“快速”规则。在美国,这正常吗?我该如何处理这种教条主义?
13 ruby  haskell  agile 

9
资源,以提高您的递归理解?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 我知道什么是递归(当一个patten在其内部重新出现时,通常是一个函数,在有条件的突破后会在其一行上调用自己...对吗?),如果我仔细研究它们,我就能理解递归函数。我的问题是,当我看到新的示例时,最初总是很困惑。如果我看到一个循环,或者一个映射,压缩,嵌套,多态调用等,我仅通过查看就知道发生了什么。当我看到递归代码时,我的思考过程通常是“这是wtf吗?” 其次是“哦,这是递归的”,其次是“如果他们说可以的话,我想它一定有用。” 那么,您在此方面有什么技巧/计划/资源来培养技能吗?递归是一个很奇怪的概念,因此我认为解决它的方法可能同样很奇怪而且很模糊。

1
有可能证明一个函数是幂等的吗?
是否可以使用静态或从属类型来证明函数是幂等的? 我已经搜索了Google以及StackOverflow / StackExchange上的各个地方,但是都没有运气。我找到的最接近的是有关Idris的对话:https ://groups.google.com/forum/#! topic/ idris-lang/ yp7vrspChRg 不幸的是,这种讨论让我有些头疼。
12 haskell 

2
Haskell解决3n + 1问题的方法
这是来自SPOJ的一个简单的编程问题:http : //www.spoj.com/problems/PROBTRES/。 基本上,要求您为i和j之间的数字输出最大的Collat​​z周期。(数字$ n $的Colatz周期是最终从$ n $变为1的步骤数。) 我一直在寻找一种Haskell方法,以比Java或C ++更好的性能来解决问题(以适应允许的运行时限制)。尽管可以记住任何已计算周期的周期长度的简单Java解决方案将起作用,但是我并未成功地将其应用于获得Haskell解决方案的想法。 我已经尝试了Data.Function.Memoize,以及使用这篇文章中的想法的自制日志时间备注技术:https ://stackoverflow.com/questions/3208258/memoization-in-haskell 。不幸的是,记忆实际上使cycle(n)的计算更加缓慢。我认为,放缓的原因来自Haskell方式的开销。(我尝试使用编译的二进制代码运行,而不是进行解释。) 我还怀疑简单地将数字从i迭代到j可能会很昂贵($ i,j \ le10 ^ 6 $)。因此,我甚至尝试使用http://blog.openendings.net/2013/10/range-trees-and-profiling-in-haskell.html中的想法为范围查询预先计算所有内容。但是,这仍然会出现“超出时间限制”错误。 您能为此告知一个精巧的竞争性Haskell程序吗?

1
为什么Haskell函子在其目标类别中仅具有派生类型?
在Haskell中,Functor类型类函子的定义如下(例如,参见Haskell Wiki): class Functor (f :: * -> *) where fmap :: (a -> b) -> f a -> f b 据我了解(请纠正我,如果我错了),这样的仿函数只能作为目标类别使用类型构造一个类别构成,例如[],Maybe等等。另一方面,人们可能会想到有任何类别的函子作为函子的目标,例如所有Haskell类型的类别。例如,Int可以是函子的目标类别中的对象,而不仅仅是Maybe Intor [Int]。 限制Haskell函子的动机是什么?
12 haskell 

2
有人可以解释Haskell记忆化背后的概念吗?
(请注意,我将问题放在这里是因为它是关于它的概念机制,而不是编码问题) 我当时正在开发一个小型程序,该程序在其等式中使用了斐波那契数列,但是我注意到,如果超过一定数,它会变得非常缓慢,在谷歌上徘徊了一段时间,我偶然发现了Haskell中一种称为的技术Memoization,他们展示了这样的代码: -- Traditional implementation of fibonacci, hangs after about 30 slow_fib :: Int -> Integer slow_fib 0 = 0 slow_fib 1 = 1 slow_fib n = slow_fib (n-2) + slow_fib (n-1) -- Memorized variant is near instant even after 10000 memoized_fib :: Int -> Integer memoized_fib = (map fib …

2
功能编程和状态算法
我正在用Haskell学习函数式编程。同时,我正在研究自动机理论,由于两者看起来很融洽,所以我正在编写一个小型库来玩自动机。 这就是让我问的问题。在研究评估状态可达性的方法时,我想到了一个简单的递归算法效率不高,因为某些路径可能共享某些状态,而我可能最终不只一次评估它们。 例如,在这里,评估可达性的摹从一个,我必须排除˚F双方同时检查通过路径d和Ç: 因此,我的想法是,在多个路径上并行工作并更新排除状态的共享记录的算法可能很棒,但这对我来说太过分了。 我已经看到,在某些简单的递归情况下,可以将状态作为参数传递,这就是我在这里要做的,因为我向前传递了要避免循环的状态列表。但是是否有一种方法也可以向后传递该列表,例如将其与canReach函数的布尔结果一起返回到元组中?(尽管这有点强迫) 除了示例案例的有效性之外,还有哪些其他技术可用来解决此类问题?我觉得这些必须足够普遍,以至于必须有解决方案,例如fold*or 会发生什么map。 到目前为止,阅读learningyouahaskell.com并没有发现任何内容,但考虑到我还没有接触过monad。 (如果有兴趣,我将代码发布在codereview上)

2
函数式反应式编程-Fay的表达能力够吗?
因此,我正在做一个相当参与的javascript / html客户端,其中包含许多ajax调用和其他涉及回调机制的事情。我很高兴为此目的使用Fay。我知道榆树。尝试了一下,喜欢FRP元素。现在,我想知道在Fay中是否可能有类似的结构。 此时,Fay中是否有FRP的具体示例? 一些相关技术: 箭,JavaScript中的箭状玻璃钢 FlapJax,另一个javascript替代方案 Bacon.js,javascript中的FRP 一种可能的解决方案,使用培根。带演示。

2
FP用于仿真和建模
我将要开始一个模拟/建模项目。我已经知道OOP用于此类项目。但是,研究Haskell使我考虑使用FP范例对组件系统进行建模。让我详细说明: 假设我有一个类型A的组件,其特征是一组数据(如温度或压力,PDE和某些边界条件等参数),以及一个类型B的组件,其特征是一组不同的数据(不同或相同的参数,不同的PDE和边界条件)。我们还假设将要应用于每个组件的函数/方法是相同的(例如,Galerkin方法)。对象的可变状态将用于非恒定参数。 如果要使用OOP方法,我将创建两个对象,这些对象将封装每种类型的数据,解决PDE的方法(继承将在此处用于代码重用)和PDE的解决方案。 另一方面,如果我要使用FP方法,则每个组件都将分解为数据部分和对数据起作用的功能,以获得PDE的解决方案。非常数参数将作为其他函数(例如时间)传递或由某种可变性(可变性的仿真等)表示。假设对数据进行线性运算是微不足道的,这种方法对我来说似乎更简单。 总之,与OOP相比,实施FP方法实际上是否更简单,更易于管理(添加不同类型的组件或新方法来解决pde)? 我来自C ++ / Fortran,而且我不是专业程序员,所以请在出现任何错误的地方进行纠正。

2
我们可以建造一台功能正常的计算机吗?
就像FP一样,最终,我们所有的程序都是结构化的。也就是说,我们制作它们的纯度或功能无关紧要-它们始终会转换为汇编,因此实际上在幕后运行的是指令,状态和循环。我们有点模仿FP。 作为硬件新手,我的问题是:为什么我们不使用实际上以功能样式计算事物的计算机体系结构?例如,一台计算机可能由原始的“功能芯片”组成,例如“ concat”,“ map”和“ reduce”,而程序只会告诉计算机如何在这些芯片之间流动数据以计算所需的结果,例如连接语言。 这真的没有道理,但可以说明我在想什么。

1
有什么直觉可以支持在Haskell中将Maybe构造函数称为“ Just”?
像这样的可选类型的直觉Maybe Int是:要么没有 Int(因此Nothing存在),要么有一些 Int。那里有东西。 对我来说,我们将类型构造器称为“负数”情况是有意义的Nothing,因为这恰好意味着-那里没有Int。但是,为什么在重点在于实际存在的东西的情况下使用“ 只是 ”一词呢? 对我来说,“ Just”一词的含义是它所描述的事物少于替代事物。与实际存在的事物相反 例如, 你今晚有事吗? B:没有;我只是待在家里看电视。 答:您是否调查过房屋周围令人毛骨悚然的鬼声? B:是的,事实证明它实际上只是一只猫头鹰。 显然,我缺乏这种命名选择所基于的直觉。它是什么?因为对我来说,Just字样与它在Maybe类型中的用法相反。

1
使用Haskell类型类强制交换
我想为可以交叉在一起的几何对象定义一个类型类: class Intersect a b c | a b -> c where intersect :: a -> b -> c -- Language extensions: -XMultiParamTypeClasses, -XFunctionalDependencies 这个想法是要有一个通用的交集函数,可以处理不同类型的对象。可以想象这样的情况 instance Intersect Line Plane (Maybe Point) where ... instance Intersect Plane Plane (Maybe Line) where ... 但我也想声明交集是可交换的: instance (Intersect a b c) => Intersect b …

2
Haskell内存效率-哪种方法更好?
我们正在基于修改后的二维语法语法实现矩阵压缩库。现在,我们对数据类型有两种方法-如果使用内存,哪种方法更好?(我们要压缩一些东西;))。 语法包含恰好有4个Productions的NonTerminals或右侧的Terminal。我们将需要Productions的名称来进行相等性检查和语法最小化。 首先: -- | Type synonym for non-terminal symbols type NonTerminal = String -- | Data type for the right hand side of a production data RightHandSide = DownStep NonTerminal NonTerminal NonTerminal NonTerminal | Terminal Int -- | Data type for a set of productions type ProductionMap = Map …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.