【问题标题】:Learning functional/Clojure programming - practical exercises? [closed]学习函数式/Clojure 编程 - 实践练习? [关闭]
【发布时间】:2011-02-22 16:50:17
【问题描述】:

我正在学习使用 Clojure 进行函数式编程。您可以推荐哪些实际练习?带有解决方案的在线存储库将是完美的。

我能想到的一个想法是遍历所有流行的排序、树、图等算法,并自己在 Clojure 中实现它们。虽然它可以工作,但它可能非常陡峭,而且我可能会效率低下(与知道她在做什么的人相比)。

【问题讨论】:

标签: functional-programming clojure


【解决方案1】:

4clojure 最近上线了。它从函数式 Koans 和 99 Lisp Problems 中的几个谜题中汲取了很多灵感;但它通过提供您只需要浏览器的学习体验来改进两者。

问题的难度各不相同,从 What is the second element of this list? 这样的语言教程到 Is it possible to arrange these N words so that each differs from the preceding one by at most one character 这样的发人深省的问题,每天都在增加更多的问题。

【讨论】:

    【解决方案2】:

    我建议你做 Project Euler 练习:

    http://projecteuler.net/

    Project Euler 是一系列 具有挑战性的数学/计算机 需要的编程问题 不仅仅是数学见解 解决。虽然数学会 帮助你达到优雅和 有效的方法,使用 计算机和编程技能将 需要解决大多数问题。

    由于许多程序员正在解决 Project Euler 练习,您可以将解决方案与其他(非函数式)编程语言进行比较,而且 Clojure 解决方案也可用:http://clojure-euler.wikispaces.com/,因此您可以对比命令式与函数式/惯用的 Clojure。

    当然,首先你自己做练习,而不用咨询任何解决方案,你会学到最多的东西。

    【讨论】:

    【解决方案3】:

    试试99 Lisp Problems。解决方案不在 clojure 中,但应该很容易翻译。

    【讨论】:

      【解决方案4】:

      我最近开始自己学习 Clojure,发现 labrepl 很有用。

      它让您熟悉基础知识和 REPL,包含许多练习并描述了很多在文档中很难找到的非显而易见的东西,因为您还不知道自己在寻找什么.

      推荐。

      编辑

      还有Python Challenge,几行编程就能解决的一系列谜题;谜题的解决方案会为您提供下一个谜题要访问的 URL。

      虽然不是专门的 Clojure,但这些谜题非常有趣,并且是让您了解任何新语言恕我直言的好方法。 (有几个特定于 Python 的谜题,但大多数不是。卡住时请参阅forum for Python Challenge Hints。)

      Python Challenge 与 Euler 任务的不同之处在于更实用,更少以数学为导向;任务包括过滤图像的字节和以编程方式跟踪超链接。

      【讨论】:

        【解决方案5】:

        Clojure 有一些函数式 Koans:https://github.com/functional-koans/clojure-koans

        我还没有尝试过这些,但听到了好评。

        【讨论】:

        【解决方案6】:

        作为一名曾经的 LISP 程序员,我发现 Clojure Koans https://github.com/functional-koans/clojure-koans 非常高效且条理清晰。

        使用三窗口排列(编辑器 + 评估器 + 复制)来获得即时反馈、文档参考和动态试验。

        “教程”的主题组织得很好,并逐渐引入了更复杂的材料。如果您至少有一些 LISP 经验,这当然是一个很好的起点。

        【讨论】:

          【解决方案7】:

          我建议在 github 上研究 clojure.contrib 中的代码。

          作为学习 FP 的练习,我建议您只使用 Clojure 编写您当前正在开发的应用程序,但尽量不要使用任何 Refs 或循环。致力于使用递归在功能上解决您的问题。如果您认为必须使用 Ref 或循环,请确保您能解释为什么会这样。

          【讨论】:

            【解决方案8】:

            http://exercism.io/ 有几个不那么简单的练习,他们给你一个测试和描述,你提交一个解决方案,你通过查看其他人的代码来重构我强烈推荐它,而且它是多语言的,你可以做练习使用他们支持的任何编程语言。

            正如其他人所提到的,Project Euler 是一个很好的起点。但是,请选择一本可以教您实现 clojure 的基础知识和基本原理的好书,Stuart Halloway 的 Programming Clojure 会浮现在脑海中。

            一旦您完成了 Timothy Baldridge 提供的几个视频教程,他将剖析 core.async、传感器、逻辑编程和许多其他有趣的东西,请访问:https://tbaldridge.pivotshare.com/

            【讨论】:

              【解决方案9】:

              我强烈推荐Hackerrank,它有函数式编程领域:https://www.hackerrank.com/domains/fp/intro

              您不仅可以使用 clojure,还可以使用 haskell、scala、erlang 等等来检查您的技能

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2011-05-11
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2010-09-23
                • 1970-01-01
                • 2015-05-01
                • 1970-01-01
                相关资源
                最近更新 更多