问题标签 [purely-functional]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
972 浏览

uml - 如何绘制应用功能图?

我试图找到一些好的读物来澄清这一点,但我找不到它(或者我可能只是不知道如何正确搜索)。

我试图找到的是,考虑到您有一个应用程序:

  • 与数据库交互;
  • 与大型机交互;
  • 与外部供应商互动;
  • ETC...

在功能视图中而不是在更技术性的视图中绘制表示此图的最佳方法是什么?什么样的书籍、文章、网站可以帮助我更清楚地了解我应该遵循哪种方法?

提前致谢。

0 投票
2 回答
239 浏览

haskell - 如何知道表面上纯粹的 Haskell 接口何时隐藏了不安全的操作?

我最近一直在阅读unsafePerformIO,我想问你一些事情。我对真实语言应该能够与外部环境进行交互这一事实感到满意,因此unsafePerformIO在某种程度上是合理的。

但是,据我所知,我不知道有任何快速方法可以在不检查代码以搜索调用的情况下知道明显纯的(从类型判断)接口/库是否真的纯unsafePerformIO(文档可以省略提一下)。我知道只有在您确定可以保证引用透明度时才应该使用它,但我还是想知道它。

0 投票
2 回答
2076 浏览

algorithm - 用前缀树实现一个基本的搜索引擎

问题是在不使用任何存储和迭代方法的情况下用函数式语言实现前缀树(Trie)。

我正在尝试解决这个问题。我应该如何解决这个问题?你能给我确切的算法或链接,显示已经用任何功能语言实现了吗?

为什么我要这样做 => 创建一个具有以下功能的简单搜索引擎

  • 将单词添加到树
  • 在树中搜索单词
  • 删除树中的一个词

为什么我想使用函数式语言 => 我想进一步提高我解决问题的能力。

注意:由于这是我的爱好项目,我将首先实现基本功能。

编辑:

i.)我的意思是“不使用存储”=>我不想使用变量存储( ex int a ),引用变量 array 。我想通过递归计算结果,然后将结果显示到屏幕上。

ii.) 我写了几行,但后来我删掉了,因为我写的让我生气。很抱歉没有表现出我的努力。

0 投票
1 回答
740 浏览

haskell - 纯函数超时

我怎样才能“杀死”一个耗时太长的纯计算?我试过

但是,这不起作用。(return . fact) 99999999用“真正的” IO 函数替换它getLine,这可以按预期工作。

0 投票
2 回答
1865 浏览

haskell - 函数式编程的分析与设计

当您计划使用 Haskell 等函数式编程语言开发系统时,您如何处理分析和设计阶段?

我的背景是命令式/面向对象的编程语言,因此,我习惯于用例分析和使用 UML 来记录程序的设计。但问题是 UML 本质上与面向对象的软件开发方式相关。

我很感兴趣,为将要使用函数式编程开发的系统开发文档和定义软件设计的最佳方式是什么。

  • 您是否仍会使用用例分析结构化分析和设计来代替?
  • 软件架构师如何定义系统的高级设计以便开发人员遵循它?
  • 当您应该展示解决方案的设计时,您会向您的客户或新开发人员展示什么?
  • 您如何在不先写完所有内容的情况下记录整个事物的图片?
  • 在功能世界中有什么可以与UML相媲美的吗?
0 投票
3 回答
1261 浏览

algorithm - 融合持久化的实际应用

我只是在阅读Brodal 等人的纯功能最坏情况恒定时间可连接排序列表。他们对数据结构上下文中不同类型持久性的介绍给我留下了一个明显的问题:

融合持久化:所有版本都可以更新和查询,另外,两个版本可以组合产生一个新版本。请注意,在这种情况下,可以通过重复将其与自身连接来在多项式时间内创建指数大小的结构。

通过反复将其与自身连接来在多项式时间内创建“指数大小”结构的实际应用是什么?

0 投票
3 回答
613 浏览

function - `(Integer a) => a -> Bool` 和 `Integer -> Bool` 之间的区别?

我今天用 Haskell 编写了我的第一个程序。它编译并成功运行。而且由于它不是典型的“Hello World”程序,它实际上做的远不止这些,所以请恭喜我:D

无论如何,我对我的代码和 Haskell 中的语法毫无疑问。

问题:

我的程序从标准输入中读取一个整数N,然后,对于irange 中的每个整数[1,N],它会打印是否i是素数。目前它不检查输入错误。:-)

解决方案:(还有疑问/问题)

为了解决这个问题,我编写了这个函数来测试整数的素数:

它工作得很好。但我怀疑第一行是许多尝试的结果,因为我在本教程中阅读的内容不起作用,并给出了这个错误(我这是一个错误,虽然它没有这么说):

根据教程(顺便说一句,这是一个写得很好的教程),第一行应该是:(教程说(Integral a) => a -> String,所以我认为(Integer a) => a -> Bool应该也可以。

这不起作用,并给出上面发布的错误(?)。

为什么它不起作用?这条线(不起作用)和这条线(起作用)有什么区别?


1另外,循环到的惯用方式是N什么?我对代码中的循环并不完全满意。请提出改进​​建议。这是我的代码:

0 投票
2 回答
4872 浏览

scala - Scala 中的副作用

这些天我正在学习 Scala。我对 Haskell 有一点熟悉,尽管我不能声称自己很了解它。

给不熟悉 Haskell 的人的附注

我喜欢 Haskell 的一个特点是,不仅函数是一等公民,而且副作用(让我称之为动作)也是一等公民。一个动作,在执行时会给你一个 type 的值a,属于一个特定的 type IO a。您可以像传递任何其他值一样传递这些操作,并以有趣的方式将它们组合起来。

事实上,结合副作用是 Haskell 中对它们做某事的唯一方法,因为你无法执行它们。相反,main执行的程序是您的函数返回的组合操作。这是一个巧妙的技巧,它可以让函数变得纯粹,同时让你的程序实际上做一些除了消耗能量之外的事情。

这种方法的主要优点是编译器知道您执行副作用的代码部分,因此它可以帮助您捕获错误。

实际问题

在 Scala 中是否有某种方法可以让编译器类型为您检查副作用,例如,您可以保证不会在某个函数内执行副作用?

0 投票
6 回答
2284 浏览

c - 为什么 printf() 是一个不纯的函数?

据我所知,不纯函数是那些在使用相同参数调用时并不总是返回相同值的函数(我必须遗漏一些东西,或者可能是错误的,如果我是,请纠正我)。

那么为什么被printf()认为是不纯函数呢?

0 投票
2 回答
1020 浏览

functional-programming - 什么时候可以修改函数式语言中的变量?

所以我正在使用 Racket Scheme 自学函数式编程,到目前为止我很喜欢它。作为我自己的练习,我一直在尝试以纯粹的功能方式实现一些简单的任务。我知道不变性是函数式风格的重要组成部分,但我想知道是否有任何时候可以。

我想到了一种有趣的方法,让函数在与过滤器一起使用时从字符串列表中去除非唯一字符串,如下所示:

如您所见,make-uniquer返回一个字符串列表的闭包以比较其唯一性,这样它就可以充当过滤器的简单谓词。但我正在破坏性地更新封闭列表。这是不好的形式,还是可以以这种方式更改局部封闭变量?