我的教授,告诉我们,我们可以选择一种编程语言为我们的下一个节目的分配。我一直想尝试一种功能性的语言,所以我想我会尝试的。问题是我了解的语法和了解基本概念,但我有问题得到的一切来的"点击"在我的头上。没有任何人有任何建议?或者我也许选择了错误的语言来开始编程功能吗?

有帮助吗?

解决方案

这有点像骑自行车,只需要练习。尝试用它来解决一些问题,也许是 ProjectEuler ,最后它会点击。

有人提到过“The Little Schemer”这本书。这是一个非常好的阅读。虽然它以Scheme为目标,但实际问题值得通过。

祝你好运!

其他提示

嗯,对我来说,我遇到了同样的问题,因为你不在一开始时我开始做OCAML,但是诀窍就是,你必须开始思考 你想要什么代码 如何做到这一点!!!

例如,计算方的清单的元素,忘记了的长度清单和此种技巧,只是 认为数学 这样的:

  • 如果列表是空的->我做的

  • 如果没有,那么该名单必须有一个头部和尾-你的计算方的头,然后问问你的功能要做的同样的尾部。

只是认为关于一般情况下和基础之一,并且,你是的发射数据并不修改(除非你想要修改它;)).

祝你好运!

您可以查看 The Little Schemer

如何: http://www.defmacro.org/ramblings/lisp.html

从常规命令式程序员(Java,C#等)的角度来看,这是一个非常简单的逐步介绍,在lisp中进行思考。

出于教育目的,我会推荐PLT计划。它是一个可移植且功能强大的环境,具有非常好的示例和更好的文档。它将帮助您以一种非常干净的方式逐步发现功能编程背后的思想。选择一个小应用程序来实现将帮助您学习新语言。

http://www.plt-scheme.org/

另外“计算机程序的结构和解释” H. Abelssn,G。Sussman和J. Sussman是一本关于Scheme(和编程)的非常好的书。

此致

MUE

关于Lisp的一些想法,不是特定于Clojure(我不是Lisp专家,所以我希望它们大多是正确和有用的):

AST中的编码

我对编译器或解释器理论知之甚少,但每当我在Lisp中编码时,我都会感到惊讶,就像直接构建AST一样。

这是“code = data”的一部分。意味着,在Lisp中编码很像用AST节点填充数据结构(嵌套列表)。太棒了,它也很容易阅读(使用正确的文本编辑器)。

可编程编程语言

因此代码块只是嵌套列表,列表操作是语言的一部分。因此,您可以非常轻松地编写生成Lisp代码的Lisp代码(请参阅Lisp宏)。这使得Lisp成为可编程(本身!)编程语言。

这使得构建 DSL 或Lisp中的翻译非常容易(请参阅还 meta-circular evaluation )。

永远不要重启任何东西

在大多数Lisp系统中,代码(包括文档)可以在运行时进行内省和热交换。

高级OOP

然后,大多数Lisp系统都有某种派生自CLOS的对象系统,它是一种先进的(与许多OOP实现相比)和可配置的对象系统(参见元对象协议的艺术)。

很久以前发明的所有这些功能,但我不确定它们是否可用于许多其他编程语言(尽管大多数都在追赶,例如关闭),所以你必须“重新发现”。并通过练习习惯这些(见其他答案中的书籍)。

请记住:这是所有数据!

编写一些简单的典型职能,这些是良好的,喜欢

  • 反向清单

  • 告诉我们,如果一个原子的某个地方在一个s-表达

  • 写等于告诉我们,如果2个s-表情都是平等的

  • 写的边缘,获得该名单的原子条纹的s-表达

  • 写信号,则写SUBLIS

  • 象征性的差异

  • 代数简化

  • 写一个简单的EVAL和/或适用

理解这些是良好的对这类不端效应功能的程序。

它还可用于有状态的副作用(非功能性的)的程序,但这些都是更喜欢"程序"而不是"功能"。

这是一个更好的赋予应用程序取决于应用程序。在一般情况下,它应该包含不少,并没有更多的国家的信息不必要的。

容易!

  

M-x   lisp-mode

好的,好的,所以你可能没有大脑的Emacs。说真的,你需要做的就是真正善于递归。当试图将递归的概念扩展到规范的例子之外时,这可能是一个非常大脑扭曲,但最终它将导致更流畅,更lispy的代码。

此外,很多人都挂在括号上,我真的不知道为什么 - 语法非常简单和一致,可以在几分钟内掌握。对我来说,在学习了C ++和Java之后我来到了Scheme,我一直认为“函数”和“函数”之间的区别。和“运营商”这是一种错误的二分法,看到这种区别消失令人耳目一新。

就功能编程而言,只要你能够围绕一个函数是一等值并且可以传入和传出其他函数这一事实你应该没问题。随着时间的推移,这一点的用处将变得清晰,但是你可以编写函数获取函数和函数返回函数。

最后,我不确定Clojure对宏有什么支持,但它们被认为是lisp的重要组成部分。但是,在你对上述项目非常熟悉之前,我不会担心学习它们 - 虽然宏非常有用且功能多样,但它们的使用频率也低于我提到的其他技术。

我从一种可以解释的语言开始。我发现莫斯科ML 相当容易。它是Standard ML的轻量级实现。

我个人的做法是找一个小项目(可能需要3-5个小时的黑客攻击)并实施它。博客过滤工具怎么样?也许只是一个河内塔或链接列表实施(通常是一夜项目)。

它通常的工作方式是我第一次实现它很差,扔掉我所拥有的,最后点击几个小时。

一个巨大的帮助就是采取类似的方式...嗯... LISP! :)作业将迫使你面对很多概念,并在学期结束前很久就点击了我。

祝你好运!!

祝你好运。我花了大约一半的时间来完成“编程语言”。在Scheme之前的大学课程“点击”。一旦发生这种情况,一切都有意义,我爱上了函数式编程。

在Lisp中编写一个Lisp解释器。

如果你没有alrady,请阅读使lisp成为一种独特语言的原因。如果你不首先这样做,你将尝试做与其他编程语言相同的事情。

然后尝试实施一些小事(试着让它对你有用,否则你可能没有动力)。

Lisp in a box 是一个让你的脚湿透的好方法。

对我来说,重要的是要确保你以'lisp-y'的方式做所有事情。不要试图想'在Java中我在这里使用for循环,我该怎么做Lisp中的循环?'但要通过足够的示例和教程(正如有人指出的那样, SICP 非常适合这种情况)你可以在代码看起来像'Lisp-y'时开始发现并识别常见的语言范例。

我当然知道看一些我刚才编写的代码的感觉,而且直觉地知道它对于那种语言和平台/框架来说是正确的惯用语 - 我认为,这就是“点击”的时候。

编辑:选择功能性语言的荣誉,较小的学生会用Java完成它:)

谁说它会点击? 我总是很困惑

但是如果你想一下可以隐藏多少抽象,那就在lisp宏之后。然后你的大脑会爆炸。

:)

我看看编程Clojure。对于非lispers来说,这是一本很好的书。

除了其他SO'ers已经建议的,这里是我的2美分:

  1. 开始学习语言并尝试使用语言中的一些简单的数字/爱好问题
  2. 重要提示:将解决方案/代码发布到StackOverflow,询问人们的意见,如果这确实是LISPy 方式的话。
  3. 祝你好运!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top