我最近看到了很多函数式编程,Clojure看起来特别有趣。 当我“理解”它的基本描述的时候,我无法弄清楚,如果我可以的话,我将如何在日常的基础上使用它作为web开发者。 我所阅读的很多内容都集中在函数式编程的math方面,而不是常规OO中的典型编程情形。 我有没有得到棒的错误结局? 函数式编程完全与Web开发无关吗? 如果没有,是否有任何使用“networking”的例子?
一个经典的编程练习是在Lisp / Scheme中编写一个Lisp / Scheme解释器。 全语言的力量可以用来为语言的一个子集产生一个解释器。 Haskell有类似的练习吗? 我想用Haskell作为引擎来实现一个Haskell的子集。 当然可以 ,但是有没有在线资源可供查看? 这是背后的故事。 我正在探索使用Haskell作为一种语言的想法来探索我正在教授的离散结构课程中的一些概念。 在这个学期里,我已经解决了米兰达 ,一个较小的语言,启发了哈斯克尔。 米兰达做了大概90%的工作,但是哈斯克尔做了大约2000%的工作。 🙂 所以我的想法是创build一个语言,具有我想要的Haskell的特征,并且不允许其他任何东西。 随着学生的进步,我可以select性地“开启”各种function,一旦他们掌握了基础知识。 教学“语言水平”已被成功地用来教授Java和Scheme 。 通过限制他们可以做的事情,可以防止他们在掌握你正在教的语法和概念的同时,在脚下自己开枪。 而且你可以提供更好的错误信息。
我试图在Haskell中直观地看到一些简单的自动物理系统(例如钟摆,机器人arm等)。 通常这些系统可以用类似的方程来描述 df/dt = c*f(t) + u(t) u(t)代表某种“智能控制”。 这些系统看起来很适合function反应编程范例。 于是我拿起Paul Hudak写的“Haskell School of Expression”一书,发现那里介绍的领域专用语言“FAL”(对于functionanimation语言)实际上对我的简单玩具系统非常好用(尽pipe一些function,特别是integrate ,似乎有点懒得有效使用,但容易修复)。 我的问题是,对于更先进甚至实际应用而言,更成熟,最新,维护良好,性能优化的替代scheme是什么? 这个wiki页面列出了Haskell的几个选项,但我不清楚以下方面: 来自Conal Eliott的项目“反应式”的状态(据我所知)是这个编程范式的发明者之一,看起来有些陈旧。 我喜欢他的代码,但也许我应该尝试其他更新的替代scheme? 在语法/性能/运行时稳定性方面,它们之间的主要区别是什么? 引用2011年的一项调查 ,第6节,“ … FRP的实施仍然不够有效或足够可预测的性能,以有效地使用需要延迟保证的领域… ”。 虽然这项调查提出了一些有趣的可能的优化,但考虑到FRP已经有超过15年的历史了,我觉得这个性能问题可能至less在几年之内甚至是很难解决的。 这是真的? 调查的同一作者在博客中谈到“时间泄漏”。 这个问题是FRP独特的问题,还是我们用纯粹的非严格语言进行编程时普遍存在的问题? 你是否曾经发现,如果不够高性能的话,就很难稳定一个FRP系统的使用寿命? 这仍然是一个研究水平的项目? 人们喜欢工厂工程师,机器人工程师,财务工程师等,是否真正使用它们(以适合他们需要的whaterver语言)? 虽然我个人比较喜欢Haskell的实现,但我可以接受其他的build议。 例如,有一个Erlang实现将会特别有趣 – 那么拥有一个智能的,适应性的,自学习的服务器进程将非常容易!
我有点惊讶MATLAB没有Map函数,所以我自己砍了一个,因为这是我不能没有的东西。 那里有更好的版本吗? 有没有一个标准的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)
问题分两部分。 首先是概念。 接下来在Scala中更具体地看待同一个问题。 在编程语言中只使用不可变的数据结构是否使实现某些algorithm/逻辑本质上在计算上更加昂贵? 这引出了一个事实,即不变性是纯粹function性语言的核心原则。 还有其他因素会影响到这一点吗? 我们来举一个更具体的例子。 通常在内存数据结构中使用可变操作来教授和实现快速sorting。 如何以PUREfunction的方式实现这样的事情,并且可变计算和存储开销相当于可变版本。 具体在斯卡拉。 下面列出了一些粗略的基准。 更多细节: 我来自命令式编程背景(C ++,Java)。 我一直在探索函数式编程,特别是Scala。 纯函数式编程的一些主要原则: 职能是一等公民。 函数没有副作用,因此对象/数据结构是不可变的 。 尽pipe现代的JVM对于创build对象非常有效,而且垃圾收集对于短期对象来说是非常便宜的,但是最小化对象创build的权利可能更好一些? 至less在并发和locking不是问题的单线程应用程序中。 由于Scala是一个混合模式,如果有必要,可以select使用可变对象编写命令代码。 但是,作为一个花了很多年的人试图重用对象,并尽量减less分配。 我想对这个甚至不允许的思想学派有一个很好的理解。 作为一个具体的例子,我对本教程中的这段代码感到有点惊讶。 它有一个Java版本的Quicksort,后面跟着一个整齐的Scala实现。 这是我尝试对实现进行基准testing。 我没有做详细的分析。 但是,我的猜测是Scala版本比较慢,因为分配的对象数量是线性的(每个recursion调用一个)。 有什么方法可以使尾部优化成为可能? 如果我是对的,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, […]
在F#中,使用pipe道转发运算符|>很常见。 然而,在Haskell中,我只见过函数组合(.)被使用。 我明白,他们是相关的 ,但有没有一个语言的原因,没有在Haskell中使用pipe道转发还是别的东西?
通过阅读这篇经典论文 ,我被困在paramorphisms。 不幸的是,该部分是非常薄,维基百科页面没有说什么。 我的Haskell翻译是: para :: (a -> [a] -> b -> b) -> b -> [a] -> b para f base = h where h [] = base h (x:xs) = fx xs (h xs) 但是我并不这么认为 – 我没有任何types签名或期望结果的直觉。 什么是paramorphism,什么是一些有用的例子在行动? 是的,我已经看到了这些 问题 ,但是它们并没有直接涵盖副变形,只是指向可能有助于引用的资源 ,而不是作为学习材料。
如果函数式编程语言不能保存任何状态,他们如何做一些简单的事情,比如读取用户的input? 他们如何“存储”input(或为此存储任何数据?) 例如:如何将这个简单的C的东西转换成像Haskell这样的函数式编程语言? #include<stdio.h> int main() { int no; scanf("%d",&no); return 0; } (我的问题受到了这个出色的文章的启发: “名词王国的执行” ,阅读它让我更好地理解了什么是面向对象的编程,Java如何以一种极端的方式实现它,以及函数式编程语言是如何对比。)
在我的编程生涯中,我遇到了库里 – 霍华德同构(Curry-Howard Isomorphism)的相对较晚的时期,也许这有助于我完全着迷于它。 这意味着对于每个编程概念,在forms逻辑中都存在精确的模拟,反之亦然。 这是一个类似的“基本”清单,从我的头顶开始: 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 […]
是否有一个中等规模的Clojure示例应用程序,可以用作“最佳实践”示例,以及从代码和代码组织的angular度来看这样一个应用程序的样子? 一个Web应用程序对我来说会特别有意思,但最重要的是程序做了一些通常有用的事情(例如博客,错误跟踪,CMS),而不是我从来没有在实际中实现过的math(解决N皇后问题,模拟Life,生成Fibonacci序列,以及函数式编程语言的常见function)。 谢谢!