javascript

java

python

c#

android

c++

node.js

php

html

jquery

ios

reactjs

css

.net

git

ruby-on-rails

sql

c

ruby

string

C#-F#在哪些领域使“绝对没有使用意义”?

Don Syme在他的SPLASH演讲中说,即使F#具有通用功能,也不能替代C#。 他继续说,在某些领域中,F#的使用毫无意义,但在本文中并未扩展。

  1. 有人可以告诉我使用F#时应避免哪些区域吗?
  2. 您还可以提及C#发挥作用的地方。

相关问题:

在哪些方面使用F#比使用C#更合适?

trans by 2019-10-08T07:12:24Z

python:在一定条件下从列表(序列)获取项目数

假设我有一个包含大量项目的列表。

l = [ 1, 4, 6, 30, 2, ... ]

我想从该列表中获取项目数,其中一个项目应满足一定条件。 我的第一个想法是:

count = len([i for i in l if my_condition(l)])

但是,如果my_condition()过滤列表也包含大量项目,我认为为过滤结果创建新列表只会浪费内存。 为了提高效率,恕我直言,上述调用不能比以下更好:

count = 0
for i in l:
    if my_condition(l):
        count += 1

是否有任何功能样式的方法来获得满足特定条件的项目数而不生成临时列表?

提前致谢。

trans by 2019-10-06T03:58:11Z

测试-Haskell函数是否可以通过正确性属性进行证明/模型检查/验证?

继续以下思想:是否存在可证明的现实世界语言?

我不认识你,但是我讨厌写我不能保证的代码。

在问完上述问题并获得了惊人的答复之后(谢谢大家!),我决定缩小搜索范围,寻求一种可证明的,务实的Haskell方法。 我选择Haskell是因为它实际上很有用(有很多为此编写的Web框架,这似乎是一个不错的基准),而且我认为它在功能上足够严格,可以证明,或者至少可以测试不变式。

这就是我想要的(一直找不到)

我想要一个框架,可以查看用伪代码编写的Haskell函数:

add(a, b):
    return a + b

-并检查某些不变式是否保持在每个执行状态。 我希望获得一些正式的证明,但是我会选择模型检查器之类的东西。
在此示例中,不变的是给定值a和b,返回值始终是a + b之和。

这是一个简单的示例,但我认为这样的框架不可能存在。 可以测试的函数的复杂度肯定会有一个上限(一个函数的10个字符串输入肯定会花费很长时间!),但这会鼓励更仔细地设计函数,与使用其他形式函数没什么不同 方法。 想象一下使用Z或B,当您定义变量/集时,您一定要确保为变量提供尽可能小的范围。 如果您的INT永远不会超过100,请确保将其初始化! 我认为,像这样的技术以及适当的问题分解应该能够令人满意地检查像Haskell这样的纯功能语言。

我对形式方法或Haskell尚无经验。 让我知道我的想法是否合理,或者您认为haskell不适合? 如果您建议使用其他语言,请确保它通过了“具有网络框架”测试,并阅读原始问题:-)

trans by 2019-10-05T21:51:06Z

scala-函数式编程-为什么要强调递归?

我正被介绍到函数式编程[FP](使用Scala)。 从我的初步学习中得出的一件事是FP严重依赖于递归。 而且似乎在纯FP中,唯一可以做迭代工作的方法就是编写递归函数。

而且由于大量使用递归,FP不得不担心的下一件事是StackoverflowExceptions,这通常是由于漫长的递归调用所致。 通过引入一些优化(从维护Scala v2.8开始的堆栈帧维护和与@tailrec批注相关的尾递归相关的优化)来解决此问题。

有人可以启发我,为什么递归对函数式编程范例如此重要? 如果我们反复进行填充,函数式编程语言的规范中是否有某些东西会被“违反”? 如果是的话,那么我也很想知道。

PS:请注意,我是函数编程的新手,因此,如果他们解释/回答了我的问题,请随时向我指出现有资源。 我也确实了解到Scala特别为做迭代的事情提供了支持。

trans by 2019-10-04T15:43:24Z

haskell-除list以外的其他类型的折痕是什么?

考虑一个单链表。 看起来像

data List x = Node x (List x) | End

定义折叠功能很自然,例如

reduce :: (x -> y -> y) -> y -> List x -> y

从某种意义上说,parf替换每个Node,用x0替换每个End

现在考虑一个简单的二叉树:

data Tree x = Leaf x | Branch (Tree x) (Tree x)

定义一个函数,例如

reduce :: (y -> y -> y) -> (x -> y) -> Tree x -> y

注意,这种减少具有完全不同的特征。 尽管基于列表的列表本质上是顺序的,但这种基于树的新列表却具有分而治之的感觉。 您甚至可以想象在其中扔一些par组合器。 (您将在列表版本中放在哪里?)

我的问题:此功能是否仍归类为“折叠”,还是其他? (如果是这样,那是什么?)

基本上,每当有人谈论折叠时,他们总是在谈论折叠列表,这本质上是顺序的。 我想知道“顺序”是什么是折叠的定义的一部分,或者这仅仅是最常用的折叠示例的巧合性质。

trans by 2019-10-03T08:54:37Z

语言不可知-Monads与Arrows

我对函数式编程中使用的monad和箭头的概念非常熟悉。 我也了解它们可以用来解决类似的问题。

但是,对于在任何给定情况下如何选择要使用的选项,我仍然有些困惑。

什么时候应该使用monad,什么时候应该使用箭头?

trans by 2019-09-30T14:09:07Z

数学-知道lambda演算有多大用处?

对所有了解lambda演算的人:在编程方面,它给您带来了什么好处? 您会建议人们学习它吗?

trans by 2019-09-24T20:17:29Z

数据结构-纯功能图和集合的统计性能

给定一种数据结构规范,例如具有已知复杂性界限的纯功能图,则必须在几种实现方式之间进行选择。 关于如何选择正确的树有一些民间传说,例如,红黑树通常被认为更快,但是AVL树在许多查找的工作负载下具有更好的性能。

  1. 是否有关于知识的系统性介绍(发表论文)(与布景/地图有关)? 理想情况下,我希望看到在实际软件上执行的统计分析。 例如,可能得出的结论是,有N种典型的地图用法,并列出每种地图的输入概率分布。

  2. 是否有系统的基准可以测试和设置不同输入分配的性能?

  3. 是否有使用自适应算法根据实际用法更改表示的实现?

trans by 2019-09-24T07:27:37Z

oop-JavaScript中的多态是什么?

我读过一些可能在互联网上找到的关于多态的文章。 但是我想我不太了解它的含义及其重要性。 大多数文章都没有说明为什么它很重要以及如何在OOP中实现多态行为(当然是在JavaScript中)。

我无法提供任何代码示例,因为我不知道如何实现它,因此我的问题如下:

  1. 它是什么?
  2. 我们为什么需要它?
  3. 这个怎么运作?
  4. 如何在javascript中实现这种多态行为?

我有这个例子。 但是很容易理解该代码的结果。 它没有给出关于多态性本身的任何清晰思路。

function Person(age, weight) {
    this.age = age;
    this.weight = weight;
    this.getInfo = function() {
        return "I am " + this.age + " years old " +
        "and weighs " + this.weight +" kilo.";
    }
}
function Employee(age, weight, salary) {
    this.salary = salary;
    this.age = age;
    this.weight = weight;
    this.getInfo = function() {
        return "I am " + this.age + " years old " +
        "and weighs " + this.weight +" kilo " +
        "and earns " + this.salary + " dollar.";
    }
}

Employee.prototype = new Person();
Employee.prototype.constructor = Employee;
  // The argument, 'obj', can be of any kind
  // which method, getInfo(), to be executed depend on the object
  // that 'obj' refer to.

function showInfo(obj) {
    document.write(obj.getInfo() + "<br>");
}

var person = new Person(50,90);
var employee = new Employee(43,80,50000);
showInfo(person);
showInfo(employee);
trans by 2019-09-22T16:03:16Z

为什么要在C ++中的函数中定义结构和类?

我只是错误地在C ++中做了这样的事情,并且它起作用了。 我为什么可以这样做?

int main(int argc, char** argv) {
    struct MyStruct
    {
      int somevalue;
    };

    MyStruct s;
    s.somevalue = 5;
}

现在,做完这些之后,我想起了很久以前在某个地方读到的有关此技巧的信息,它是一种针对C ++的穷人功能编程工具,但我不记得为什么有效,或者在哪里阅读。

欢迎回答任何一个问题!

注意:尽管在编写问题时我没有得到任何关于该问题的参考,但是当前的侧边栏指出了这一点,因此我将其放在此处以供参考,无论哪种方式,问题都不同,但可能有用。

trans by 2019-09-22T00:13:23Z

何时使用函数式编程语言?

在哪种情况下,我应该选择使用函数式编程语言而不是更简洁的面向对象语言,如C ++,C#或Java?

我理解什么是函数式编程,我真正理解的是什么类型的问题是一个完美的解决方案?

trans by 2019-09-20T06:41:03Z

函数式编程 - Scala赋值评估单元而非分配值的动机是什么?

Scala分配评估单元而不是分配的值的动机是什么?

I / O编程中的一个常见模式是执行以下操作:

while ((bytesRead = in.read(buffer)) != -1) { ...

但这在Scala中是不可能的,因为......

bytesRead = in.read(buffer)

..返回Unit,而不是bytesRead的新值。

从函数式语言中省略,似乎是一件有趣的事情。我想知道为什么这样做了?

trans by 2019-09-18T14:22:16Z

haskell - 傻瓜的递归计划?

我正在寻找一些非常简单,易于掌握的递归方案和核心运动方案(catamorphisms,anorporphisms,hylomorphisms等)的解释,这些解释不需要跟随大量的链接,或者打开类别理论教科书。 我确信我已经无意识地重新设计了许多这些方案,并在编码过程中将它们“应用”在我的头脑中(我相信我们很多人都有),但我不知道(共)递归方案是什么 使用被称为。 (好吧,我撒了谎。我刚刚读了一些这些,这引发了这个问题。但在今天之前,我一直都不知道。)

我认为这些概念在编程社区中的传播受到了令人生畏的解释和例子的阻碍 - 例如在维基百科上,而且在其他地方。

它们的名字也可能受到阻碍。 我认为有一些替代的,较少的数学名称(关于香蕉和带刺铁丝网的东西?)但是我不知道我使用的递归方案的名称是什么。

我认为使用表示简单实际问题的数据类型的示例,而不是抽象数据类型(如二叉树)会有所帮助。

trans by 2019-09-18T07:31:45Z

函数式编程 - 在Has中编写Haskell解释器

一个经典的编程练习是在Lisp / Scheme中编写一个Lisp / Scheme解释器。 可以利用完整语言的强大功能为该语言的子集生成解释器。

Haskell有类似的练习吗? 我想使用Haskell作为引擎来实现Haskell的子集。 当然可以做到,但有没有可供查看的在线资源?


这是背景故事。

我正在探索使用Haskell作为一种语言来探索我正在教授的离散结构课程中的一些概念的想法。 在这个学期,我已经选择了Miranda,这是一种激发Haskell的小语言。 米兰达做了我想做的事情的90%左右,但哈斯克尔做了大约2000%。:)

所以我的想法是创建一种语言,它具有我想要的Haskell的功能,并且不允许其他所有内容。 随着学生的进步,我可以在掌握了基础知识后有选择地“开启”各种功能。

教学“语言水平”已成功用于教授Java和Scheme。 通过限制他们可以做的事情,你可以防止他们在掌握你想要教授的语法和概念时在脚中射击。 并且您可以提供更好的错误消息。

trans by 2019-09-16T06:57:31Z

haskell - 直觉主义类型理论的组合逻辑等价物是什么?

我最近完成了一个大学课程,其中包括Haskell和Agda(一种依赖类型的函数式编程语言),并且想知道是否有可能用组合逻辑替换这些中的lambda演算。 使用Haskell,这似乎可以使用S和K组合器,从而使其无点。 我想知道Agda的等价物是什么。 即,可以使用与Agda等效的依赖类型函数式编程语言而不使用任何变量吗?

此外,是否有可能以某种方式用组合器取代量化? 我不知道这是巧合,但通用量化例如使类型签名看起来像lambda表达式。 有没有办法从类型签名中删除通用量化而不改变其含义? 例如。 在:

forall a : Int -> a < 0 -> a + a < a

如果不使用forall可以表达同样的事情吗?

trans by 2019-09-16T04:14:35Z

clojure - 函数式编程是否与Web开发相关?

我最近看到了很多关于函数式编程的知识,而Clojure看起来特别有趣。 虽然我“理解”它的基本描述,但是如果我可以的话,我无法弄清楚如何在日常工作中使用它作为Web开发人员。 我所阅读的很多内容都集中在函数式编程的数学方面,而不是常规OO中的典型编程情况。

我有错误的结束吗? 函数式编程与Web开发完全无关吗? 如果没有,是否有任何关于它'用于网络'的例子?

trans by 2019-09-13T21:38:58Z

排序 - 如何通过两个字段对Scala中的列表进行排序?

如何在Scala中按两个字段对列表进行排序,在本例中我将按lastName和firstName排序?

case class Row(var firstName: String, var lastName: String, var city: String)

var rows = List(new Row("Oscar", "Wilde", "London"),
                new Row("Otto",  "Swift", "Berlin"),
                new Row("Carl",  "Swift", "Paris"),
                new Row("Hans",  "Swift", "Dublin"),
                new Row("Hugo",  "Swift", "Sligo"))

rows.sortBy(_.lastName)

我尝试这样的事情

rows.sortBy(_.lastName + _.firstName)

但它不起作用。 所以我很好奇一个好的,简单的解决方案。

trans by 2019-09-13T19:27:17Z

算法 - 懒惰地生成排列

我正在寻找一种算法来生成集合的排列,这样我就可以在Clojure中创建它们的惰性列表。 即,我想迭代一个排列列表,其中每个排列都不计算,直到我请求它,并且所有排列不必一次存储在内存中。

或者,我正在寻找一种算法,在给定某个集合的情况下,它将返回该集合的“下一个”排列,以这种方式在自己的输出上重复调用该函数将循环遍历原始集合的所有排列, 一些订单(订单无关紧要)。

有这样的算法吗? 我见过的大多数排列生成算法都倾向于一次性生成它们(通常是递归的),它们不能扩展到非常大的集合。 Clojure(或其他函数式语言)中的实现会很有帮助,但我可以从伪代码中找出它。

trans by 2019-09-13T18:43:18Z

函数式编程 - 工作人员组合器的解释

什么是组合器?

它是“没有自由变量的函数或定义”(在SO上定义)?

或者这个怎么样:根据John Hughes在他着名的关于Arrows的论文中,“组合器是一个从程序片段构建程序片段的函数”,这是有利的,因为“......使用组合器的程序员构建了大部分所需的 自动编程,而不是手工编写每个细节“。 他接着说foldfilter是这种组合器的两个常见例子。

一些符合第一个定义的组合器:

  • 小号
  • ķ
  • ÿ
  • 其他来自To Mock a Mockingbird(我可能错了 - 我还没看过这本书)

一些符合第二个定义的组合器:

  • 地图
  • 过滤
  • 折叠/减少(推测)
  • 任何>> =,撰写,fmap ?????

我对第一个定义不感兴趣 - 那些不能帮我写一个真正的程序(如果你说服我错了,那就是+1)。 请帮我理解第二个定义。 我认为map,filter和reduce非常有用:它们允许我在更高级别编程 - 更少的错误,更短更清晰的代码。 以下是关于组合器的一些具体问题:

  1. 有哪些组合器的例子,例如map,filter?
  2. 编程语言经常实现哪些组合器?
  3. 组合器如何帮助我设计更好的API?
  4. 如何设计有效的组合器?
  5. 什么是类似于非功能语言(比如Java)的组合器,或者这些语言用什么来代替组合器?

更新

感谢@C。 A. McCann,我现在对组合器有了更好的理解。 但有一个问题对我来说仍然是一个棘手的问题:

用大量使用组合器写的函数程序和没有写的函数程序有什么区别?

我怀疑答案是组合器重型版本更短,更清晰,更通用,但如果可能的话,我希望进行更深入的讨论。

我也在寻找更复杂的组合器的例子和解释(即比fold更复杂)在常见的编程语言中。

trans by 2019-09-11T16:34:43Z

Ruby是一种功能语言吗?

维基百科说Ruby是一种功能语言,但我不相信。 为什么或者为什么不?

trans by 2019-09-10T00:13:29Z

上一页 1 2 3 4 5 6 7 8 9 10 11 12 下一页 共12页