标签: functional-programming

我应该如何看待Scala的产品类?

"scala"包有许多名为Product,Product1,Product2等的类,直到Product22.

这些类的描述肯定是准确的.例如:

Product4 is a cartesian product of 4 components
Run Code Online (Sandbox Code Playgroud)

准确,是的.交际?没那么多.我希望这对于已经理解在这里使用的"笛卡儿产品"感的人来说是完美的措辞.对于没有的人来说,这听起来有点循环."哦,是的,还有当然产品4是喃喃的4个产品咕哝,喃喃自语."

请帮助我理解正确的功能语言观点.这里使用的"笛卡尔积"是什么意思?产品类的"投影"成员表示什么?

functional-programming scala

62
推荐指数
3
解决办法
1万
查看次数

像Coq这样的非图灵完整语言有哪些实际限制?

因为那里有非图灵完整的语言,并且鉴于我没有在大学学习Comp Sci,有人可以解释一下Turing-incomplete语言(如Coq)不能做的事情吗?

或者是没有实际利益的完整性/不完整性(即它在实践中没有太大的区别)?

编辑 - 我正在寻找一个答案,你不能用非Turing完整语言构建一个哈希表,因为X或类似的东西!

programming-languages functional-programming turing-complete coq

62
推荐指数
3
解决办法
7496
查看次数

将选项类型列表缩减为仅非元素的最佳方法?

从一个选项列表到一个只包含Some的元素的列表,我出乎意料地遇到了一些麻烦.

我最初的尝试是:

    let ga = List.filter (fun xx ->
        match xx with
        | Some(g) -> true
        | None -> false) gao 
Run Code Online (Sandbox Code Playgroud)

但是,当然,这种结果类型仍然是一个选项列表.我不知道如何使用List.map来压缩它,因为你必须处理匹配语句中的所有情况.我有一个丑陋的解决方案,但我想知道是否有更好的东西.

丑陋:

    let rec gOptRemove gdec gacc = 
        match gdec with 
        | head :: tail -> 
            match head with 
            | Some(a) -> gOptRemove tail (a :: gacc)
            | None -> gOptRemove tail gacc
        | [] -> gacc
Run Code Online (Sandbox Code Playgroud)

我更愿意找到一个非递归的解决方案或找出这种事情的标准方法.

f# functional-programming

62
推荐指数
1
解决办法
8159
查看次数

Scala:"任何"和"所有"功能

我的Haskell*有点生疏,所以我可以想象我错过了显而易见的事情:

def any[A](s: Traversable[A], f: A => Boolean): Boolean = {
    s.foldLeft(false)((bool, elem) => bool || f(elem))
}
Run Code Online (Sandbox Code Playgroud)

这些属性中的一个是否适用于它?

  1. 预定义在Scala库中的某个位置
  2. 间接的,更快写成一些单行
  3. 错了(我没试过,对不起;))

*实际上是SML,但这是99%相同,但在阳光下没有人知道.

functional-programming scala

62
推荐指数
2
解决办法
3万
查看次数

函数式编程 - 很多强调递归,为什么?

我将介绍函数式编程[FP](使用Scala).从我最初的学习中得出的一点是,FP很大程度上依赖于递归.而且似乎在 FP中,执行迭代的唯一方法是编写递归函数.

由于递归的大量使用似乎FPs不得不担心的下一件事StackoverflowExceptions通常是由于长缠绕递归调用.通过引入一些优化(@tailrec从Scala v2.8开始维护堆栈帧和注释中的尾递归相关优化)来解决这个问题

有人可以请教我为什么递归对函数式编程范式如此重要?如果我们迭代地执行某些操作,那么函数式编程语言的规范中是否会出现"违反"的内容?如果是,那么我也很想知道这一点.

PS:请注意,我是函数式编程的新手,所以如果他们解释/回答我的问题,请随时向我指出现有资源.另外我也明白Scala特别为迭代的东西提供支持.

recursion functional-programming scala tail-recursion

62
推荐指数
7
解决办法
9389
查看次数

Javascript作为一种功能语言

我正在寻找功能编程概念.

我已经使用Javascript多年来在Web应用程序中进行客户端脚本编写,除了使用原型之外,还有简单的DOM操作,输入验证等.

最近,我经常读到 Javascript是支持函数式编程的语言之一.

凭借我对Javascript的熟悉和经验,我倾向于使用它来学习函数式编程.我希望我能够更专注于主要的功能概念,而不是被一种全新的语法所困扰或分散注意力.

总而言之,Javascript是学习函数式编程概念的不错选择吗?Javascript中哪些功能相关/支持函数式编程?

javascript language-features functional-programming

61
推荐指数
5
解决办法
2万
查看次数

可编程性在函数式编程的上下文中意味着什么?

当函数式程序员说某个东西可以组合或不可组合时​​,他们的意思是什么?

我读过的一些这类陈述是:

  • 控制结构不可组合.
  • 线程不构成.
  • Monadic操作是可组合的.

programming-languages functional-programming

61
推荐指数
4
解决办法
1万
查看次数

Lisp的read-eval-print循环与Python的不同之处是什么?

我遇到Richard Stallman的以下声明:

'当你启动一个Lisp系统时,它会进入一个read-eval-print循环.大多数其他语言没有什么可比阅读,没有什么可比得上eval,没有什么比得上印刷.有什么差距不足!"

现在,我在Lisp中做了很少的编程,但我在Python中编写了大量代码,最近在Erlang中编写了一些代码.我的印象是这些语言也提供了read-eval-print循环,但Stallman不同意(至少关于Python):

"在人们告诉我它与Lisp基本相似之后,我浏览了Python的文档.我的结论是,情况并非如此.当你启动Lisp时,它会"读取","eval"和"print",所有这些都在Python中缺失.

Lisp和Python的read-eval-print循环之间真的存在根本的技术差异吗?你能举例说明Lisp REPL易于使用并且在Python中很难做到的事情吗?

lisp python functional-programming read-eval-print-loop

61
推荐指数
4
解决办法
7376
查看次数

60
推荐指数
4
解决办法
2万
查看次数

什么是"n + k模式",为什么它们被禁止使用Haskell 2010?

在阅读维基百科在Haskell 2010上的条目时,我偶然发现了这一点:

-- using only prefix notation and n+k-patterns (no longer allowed in Haskell 2010)
factorial 0 = 1
factorial (n+1) = (*) (n+1) (factorial n)
Run Code Online (Sandbox Code Playgroud)

"n + k模式"是什么意思?我想这是第二行,但我不知道它可能有什么问题.任何人都可以解释那里的问题是什么?为什么Haskell 2010中不允许使用这些n + k模式?

haskell functional-programming

60
推荐指数
1
解决办法
8219
查看次数