javascript

java

python

c#

android

c++

node.js

php

html

jquery

ios

reactjs

css

.net

git

ruby-on-rails

sql

c

ruby

string

haskell - 使用currying参数的排序

我有两次最近重构的代码,以便更改参数的顺序,因为有太多的代码,如flip\x -> foo bar x 42正在发生黑客攻击。

在设计功能签名时,哪些原则可以帮助我充分利用currying?

trans by 2019-09-04T04:01:48Z

haskell - 当前功能反应式编程实现的状态是什么?

我正在尝试在Haskell中可视化一些简单的自动物理系统(例如摆锤,机器人手臂等)。通常这些系统可以用类似的方程来描述

integrate

其中integrate代表某种“智能控制”。 这些系统看起来非常适合功能反应式编程范例。

所以我抓住了保罗·胡达克的“哈斯克尔表达学派”一书,并且发现那里提供的领域特定语言“FAL”(用于功能动画语言)实际上对于我的简单玩具系统非常有效(尽管有些功能,特别是integrate,似乎有点懒得有效使用,但很容易修复)。

我的问题是,对于今天更先进甚至实际的应用,更成熟,最新,维护良好,性能优化的替代方案是什么?

这个wiki页面列出了Haskell的几个选项,但我不清楚以下几个方面:

  1. “反应”的状态,来自Conal Eliott的项目(据我所知)是这种编程范式的发明者之一,看起来有点陈旧。 我喜欢他的代码,但也许我应该尝试其他更新的替代品? 在语法/性能/运行时稳定性方面,它们之间的主要区别是什么?

  2. 引用2011年的一项调查,第6节,“...... FRP实施仍然没有足够的效率或足够可预测的性能,无法在需要延迟保证的领域中有效使用......”。 尽管这项调查显示了一些有趣的可能优化,但考虑到FRP存在超过15年这一事实,我得到的印象是,这种性能问题可能至少在几年内很难或甚至难以解决。 这是真的?

  3. 该调查的同一位作者在他的博客中谈到了“时间泄漏”。 问题是FRP独有的,还是我们在用纯粹的非严格语言编程时通常会遇到的问题? 您是否曾经发现,如果性能不够,那么随着时间的推移稳定基于FRP的系统就太难了?

  4. 这还是一个研究水平的项目吗? 人们喜欢工厂工程师,机器人工程师,金融工程师等实际使用它们(用适合他们需要的各种语言)吗?

虽然我个人更喜欢Haskell实现,但我愿意接受其他建议。 例如,拥有一个Erlang实现会特别有趣 - 那么拥有一个智能的,自适应的,自学的服务器进程就很容易了!

trans by 2019-09-02T22:06:11Z

并发性 - 函数式语言(特别是Erlang)如何/为何能够很好地扩展?

我一直在关注函数式编程语言和功能的日益增长的可见性。 我调查了他们,没有看到上诉的原因。

然后,最近我参加了Kevin Smith在Codemash上的“Erlang基础知识”演讲。

我很喜欢这个演示文稿,并了解到函数式编程的许多属性使得更容易避免线程/并发问题。 我理解缺少状态和可变性使得多个线程无法改变相同的数据,但Kevin说(如果我理解正确的话)所有通信都是通过消息进行的,并且同步处理消息(同样避免并发问题)。

但我已经读过Erlang用于高度可扩展的应用程序(爱立信首先创建它的全部原因)。 如果所有内容都作为同步处理的消息处理,那么如何有效处理每秒数千个请求? 这不是我们开始转向异步处理的原因 - 所以我们可以同时运行多个操作线程并实现可扩展性吗? 看起来这种架构虽然更安全,但在可扩展性方面却倒退了一步。 我错过了什么?

我理解Erlang的创建者故意避免支持线程以避免并发问题,但我认为多线程是实现可伸缩性所必需的。

函数式编程语言如何本质上是线程安全的,但仍然可以扩展?

trans by 2019-09-02T16:52:16Z

函数式编程 - Ruby是否执行尾部调用优化?

功能语言导致使用递归来解决许多问题,因此其中许多语言执行尾调用优化(TCO)。 TCO导致从另一个函数调用函数(或者本身,在这种情况下,这个特性也称为Tail Recursion Elimination,它是TCO的一个子集),作为该函数的最后一步,不需要新的堆栈帧, 这减少了开销和内存使用。

Ruby显然已经从函数式语言(lambdas,map等函数等)中“借用”了许多概念,这让我很好奇:Ruby是否执行尾调用优化?

trans by 2019-09-02T13:37:35Z

函数式编程 - 是否优化了任何Javascript引擎尾调用?

我有一个尾递归寻路算法,我已经在Javascript中实现,并想知道是否有任何(所有?)浏览器可能会得到堆栈溢出异常。

trans by 2019-09-02T10:57:31Z

函数式编程有哪些好处?

您认为函数式编程的好处是什么? 它们如何适用于今天的程序员?

函数式编程和OOP之间最大的区别是什么?

trans by 2019-09-01T21:15:40Z

函数式编程 - 在Swift数组上设置操作(并集,交集)?

是否有任何标准库调用可以用来对两个数组执行set操作,或者自己实现这样的逻辑(理想情况下尽可能功能和高效)?

trans by 2019-08-28T04:56:06Z

oop - 函数式编程语言如何工作?

如果函数式编程语言不能保存任何状态,他们如何做一些简单的事情,比如从用户那里读取输入? 他们如何"存储" 输入(或存储任何数据?)

例如:这个简单的C语言如何转换为像Haskell这样的函数式编程语言?

#include<stdio.h>
int main() {
    int no;
    scanf("%d",&no);
    return 0;
}

(我的问题受到了这篇优秀文章的启发:&#34;名词王国的执行&#34;。阅读它让我更好地理解了什么是面向对象的编程,Java如何以一种极端的方式实现它,以及如何 函数式编程语言是一种对比。)

trans by 2019-08-28T01:03:33Z

javascript - Map,parseInt的奇怪行为

可能重复:
javascript - Array.map和parseInt

我在twitter上看到了这个奇怪的JavaScript行为示例

['10','10','10','10','10'].map(parseInt)

评估为

[10, NaN, 2, 3, 4]

有人可以解释这种行为吗? 我用铬和萤火虫验证了它

['10','10','10','10','10'].map(function(x){return parseInt(x);})

正确返回10的数组作为整数。 这是不正确使用map(),parseInt的错误还是其他什么?

trans by 2019-08-27T05:25:15Z

haskell - 什么是paramorphisms?

通过阅读这篇经典论文,我一直坚持着对于paramorphisms。 不幸的是,该部分很薄,维基百科页面也没有说什么。

我的Haskell翻译是:

para :: (a -> [a] -> b -> b) -> b -> [a] -> b
para f base = h
  where
    h []       =   base
    h (x:xs)   =   f x xs (h xs)

但我不理解 - 我对类型签名或期望的结果没有任何直觉。

什么是paramorphism,什么是一些有用的例子?


是的,我已经看过这些问题了,但是他们并没有直接涵盖paramorphisms,只指向可能有用作为参考的资源,而不是学习材料。

trans by 2019-08-24T22:14:02Z

函数式编程 - 如何在Scala中使用map和接收索引?

是否有任何内置的List / Sequence,其行为类似于map,并提供了元素的索引?

trans by 2019-08-23T18:33:26Z

java - 函数式编程 - 不变性是否昂贵?

问题分为两部分。 第一个是概念性的。 接下来在Scala中更具体地看待同一个问题。

  1. 在编程语言中仅使用不可变数据结构是否会使实现某些算法/逻辑在实践中本身具有更高的计算成本? 这就意味着不变性是纯函数式语言的核心原则。 还有其他因素会对此产生影响吗?
  2. 让我们举一个更具体的例子。 Quicksort通常使用内存数据结构中的可变操作来教授和实现。 如何以可靠的功能方式实现这样的事情,具有与可变版本相当的计算和存储开销。 特别是在Scala中。 我在下面列出了一些原油基准。

更多细节:

我来自命令式编程背景(C ++,Java)。 我一直在探索函数式编程,特别是Scala。

纯函数式编程的一些主要原则:

  1. 职能是一等公民。
  2. 函数没有副作用,因此对象/数据结构是不可变的。

尽管现代JVM对于创建对象非常有效,并且垃圾收集对于短期对象来说非常便宜,但是最小化对象创建可能更好吗? 至少在并发和锁定不是问题的单线程应用程序中。 由于Scala是一种混合范例,如果需要,可以选择使用可变对象编写命令式代码。 但是,作为一个花了很多年时间试图重用对象并最小化分配的人。 我希望对那些甚至不允许这样的思想学派有一个很好的理解。

作为一个特例,我对本教程中的代码片段感到有些惊讶6。 它有一个Java版本的Quicksort,后面是一个整洁的Scala实现。

这是我尝试对实现进行基准测试。 我还没有做过详细的剖析。 但是,我的猜测是Scala版本较慢,因为分配的对象数是线性的(每个递归调用一个)。 尾调用优化是否有可能发挥作用? 如果我是对的,Scala支持自我递归调用的尾调用优化。 所以,它应该只是帮助它。 我正在使用Scala 2.8。

Java版本

public class QuickSortJ {

    public static void sort(int[] xs) {
      sort(xs, 0, xs.length -1 );
    }

    static void sort(int[] xs, int l, int r) {
      if (r >= l) return;
      int pivot = xs[l];
      int a = l; int b = r;
      while (a <= b){
        while (xs[a] <= pivot) a++;
        while (xs[b] > pivot) b--;
        if (a < b) swap(xs, a, b);
      }
      sort(xs, l, b);
      sort(xs, a, r);
    }

    static void swap(int[] arr, int i, int j) {
      int t = arr[i]; arr[i] = arr[j]; arr[j] = t;
    }
}

Scala版本

object QuickSortS {

  def sort(xs: Array[Int]): Array[Int] =
    if (xs.length <= 1) xs
    else {
      val pivot = xs(xs.length / 2)
      Array.concat(
        sort(xs filter (pivot >)),
        xs filter (pivot ==),
        sort(xs filter (pivot <)))
    }
}

Scala Code来比较实现

import java.util.Date
import scala.testing.Benchmark

class BenchSort(sortfn: (Array[Int]) => Unit, name:String) extends Benchmark {

  val ints = new Array[Int](100000);

  override def prefix = name
  override def setUp = {
    val ran = new java.util.Random(5);
    for (i <- 0 to ints.length - 1)
      ints(i) = ran.nextInt();
  }
  override def run = sortfn(ints)
}

val benchImmut = new BenchSort( QuickSortS.sort , "Immutable/Functional/Scala" )
val benchMut   = new BenchSort( QuickSortJ.sort , "Mutable/Imperative/Java   " )

benchImmut.main( Array("5"))
benchMut.main( Array("5"))

结果

连续五次运行的时间(以毫秒为单位)

Immutable/Functional/Scala    467    178    184    187    183
Mutable/Imperative/Java        51     14     12     12     12
trans by 2019-08-20T19:56:17Z

函数式编程中的reduce和foldLeft / fold之间的区别(特别是Scala和Scala API)?

为什么Scala和像Spark和Scalding这样的框架都有reducefoldLeft? 那么reducefold之间的区别是什么?

trans by 2019-08-18T21:58:12Z

haskell - 在纯函数式语言中,是否有算法来获得反函数?

在像Haskell这样的纯函数式语言中,是否存在一个算法来获取函数的逆,当它是双射的时(编辑)? 是否有一种特定的方式来编程你的功能呢?

trans by 2019-08-13T21:12:02Z

集合 - val-mutable与var-immutable in

Scala中是否有关于何时使用可变集合的val与使用带有不可变集合的var的指南? 或者你真的应该用不可变的集合来瞄准val吗?

事实上,这两种类型的收集给了我很多选择,而且我经常不会知道如何做出这个选择。

trans by 2019-08-13T20:48:50Z

函数式编程 - 中型Clojure示例应用程序?

是否有一个中等大小的Clojure样本应用程序,可以用作最佳实践&#34; 例如,在代码和代码组织方面看看这样的应用程序会是什么样子的好方法? Web应用程序对我来说特别有趣,但最重要的是该程序执行一些常用的功能(例如博客,错误跟踪,CMS),而不是我从未实现过的数学项目。 现实世界(解决N-queens问题,模拟生命,生成Fibonacci序列,以及功能编程语言的常用功能)。

谢谢!

trans by 2019-08-13T08:03:30Z

函数式编程 - MATLAB中的Map函数?

我对MATLAB没有地图功能感到有些惊讶,所以我自己一起攻击了一个,因为它是我无法生存的东西。 那里有更好的版本吗? 有没有一个有点标准的MATLAB函数式编程库我缺少?

function results = map(f,list)
% why doesn't MATLAB have a Map function?
results = zeros(1,length(list));
for k = 1:length(list)
    results(1,k) = f(list(k));
end

end

用法是例如

map( @(x)x^2,1:10)
trans by 2019-08-12T02:33:05Z

函数式编程 - 库里 - 霍华德同构出现的最有趣的等价是什么?

我在编程生涯中相对较晚地遇到了Curry-Howard Isomorphism,也许这有助于我对它完全着迷。 这意味着对于每个编程概念,在形式逻辑中存在精确的模拟,反之亦然。 这是&#34;基本&#34; 这些类比的清单,在我的头脑中:

program/definition        | proof
type/declaration          | proposition
inhabited type            | theorem/lemma
function                  | implication
function argument         | hypothesis/antecedent
function result           | conclusion/consequent
function application      | modus ponens
recursion                 | induction
identity function         | tautology
non-terminating function  | absurdity/contradiction
tuple                     | conjunction (and)
disjoint union            | disjunction (or)          -- corrected by Antal S-Z
parametric polymorphism   | universal quantification

那么,对于我的问题:这种同构的一些更有趣/模糊的含义是什么? 我不是逻辑学家,所以我确定我只是在这个清单上划过界面。

例如,这里有一些编程概念,我不知道逻辑中的精辟名称:

currying                  | "((a & b) => c) iff (a => (b => c))"
scope                     | "known theory + hypotheses"

这里有一些逻辑概念,我在编程术语中并没有完全固定下来:

primitive type?           | axiom
set of valid programs?    | theory

编辑:

以下是从响应中收集的更多等价物:

function composition      | syllogism                -- from Apocalisp
continuation-passing      | double negation          -- from camccann
trans by 2019-08-10T17:25:59Z

Haskell组合(。)与F#的管道前向运算符(|>)

在F#中,使用管道转发操作员|>非常常见。 然而,在Haskell中,我只见过正在使用的功能组合(.)。 我知道它们是相关的,但是有一个语言原因是管道转发不是在Haskell中使用还是其他的东西?

trans by 2019-08-10T06:39:00Z

javascript - 迭代范围的功能方式(ES6 / 7)

这个问题在这里已有答案:

  • 是否存在在ES6(ECMAScript 6)中循环x次而没有可变变量的机制?                                     15个答案

以更多功能方式执行以下操作的最佳方法是什么(使用ES6 / ES7)

let cols = [];
for (let i =0; i <= 7; i++) {
   cols.push(i * i);
}
return cols;

我试过,

return [ ...7 ].map(i => {
  return i * i;
});

但那转化为

[].concat(7).map(function (n) {
  return n * n;
});

这不是我的预期。

编辑:

@pavlo。 的确,这是一个错误。 我正在使用JSX,例如,我想要7个div,(未经测试)

let cols = [];
    for (let i =0; i <= 7; i++) {
       cols.push(<div id={i}> ...  </div>)
    }
    return cols;

所以这个想法确实是为了减少临时变量和程序感觉的数量。

trans by 2019-08-09T14:09:26Z

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