代码之家  ›  专栏  ›  技术社区  ›  Jason Baker

如何让我的大脑在“lisp模式”下运行

  •  24
  • Jason Baker  · 技术社区  · 15 年前

    我的教授告诉我们,我们可以为下一个编程作业选择一种编程语言。我一直想试试函数式语言,所以我想试试clojure。问题是我理解语法和基本概念,但我在让所有东西在脑海中“点击”时遇到了问题。有人有什么建议吗?或者我可能选择了错误的语言来开始函数式编程?

    18 回复  |  直到 15 年前
        1
  •  16
  •   Sean    15 年前

    这有点像骑自行车,只是需要练习。试着用它解决一些问题,也许吧 ProjectEuler 最终它会发出咔嗒声。

    有人提到《小阴谋家》这本书,这本书读得很好。虽然它针对的是一个计划,但实际问题值得研究。

    祝你好运

        2
  •  14
  •   Svante    15 年前

    嗯,对我来说,我遇到的问题和我开始做OCAML时遇到的问题一样,但关键是你必须开始思考 你想从代码中得到什么

    数学思考 就像这样:

    • 如果列表为空->我完了

    只需考虑一般情况和基本情况,并且您正在发送数据而不是修改它(除非您想要修改它;)。

    祝你好运

        3
  •  6
  •   Andrew Hare    15 年前

    你可以退房 The Little Schemer .

        4
  •  5
  •   Joshua Hayworth    15 年前

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

    从常规命令式程序员(Java、C#等)的角度来看,这是一个非常简单、循序渐进的lisp思维入门。

        5
  •  4
  •   themue    15 年前

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

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

    此外,H.Abelssn、G.Sussman和J.Sussman的《计算机程序的结构和解释》是一本关于方案(和编程)的非常好的书。

    当做

        6
  •  4
  •   Abhijith    15 年前
        7
  •  4
  •   Svante    15 年前

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

    AST编码

    我对编译器或解释器理论知之甚少,但每次我用Lisp编写代码时,我都会惊讶地发现它就像是在直接构建AST。

    一种可编程程序设计语言

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

    DSL 或者Lisp中的解释器非常简单(另请参见 meta-circular evaluation

    不要重启任何东西

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

    然后,大多数Lisp系统都有一些从CLOS派生的对象系统,这是一种高级(与许多OOP实现相比)和可配置的对象系统(参见 The Art of the Metaobject Protocol

    所有这些特性都是很久以前发明的,但我不确定它们在许多其他编程语言中是否可用(尽管大多数都在追赶,例如闭包),因此您必须“重新发现”并通过实践来习惯这些特性(参见其他答案中的书籍)。

        8
  •  3
  •   Lorenzo    15 年前

    记住:都是数据!

        9
  •  2
  •   Mike Dunlavey    15 年前

    编写一些Lisp擅长的简单经典函数,如

    • 判断原子是否在s表达式中的某个位置

    • write EQUAL可判断两个s表达式是否相等

    • 写SUBST,然后写SUBLIS

    • 符号微分

    • 写一个简单的评估和/或应用

    了解Lisp对于这类无副作用的功能程序是很好的。

    它对于有状态的副作用(非功能性)程序也很有用,但这些程序更像是“程序”而不是“功能”。

        10
  •  2
  •   Kyle Cronin    15 年前

    容易的

    M-x lisp-mode

    好吧,好吧,你的大脑可能没有Emacs。说真的,您需要做的是真正擅长递归。当试图将递归的概念扩展到规范示例之外时,这可能是一个很大的大脑扭曲,但最终会导致更流畅的lispy代码。

    而且,很多人都会被括号挂断,我真的不知道为什么-语法非常简单和一致,可以在几分钟内掌握。对我来说,我在学习C++和java之后来到了方案,我一直认为“函数”和“运算符”之间的区别是错误的二分法,看到区别消除是令人振奋的。

    就函数式编程而言,只要您能够理解函数是一级值并且可以传入和传出其他函数这一事实,您就应该可以了。随着时间的推移,这一点的有用性将变得越来越明显,但是您可以编写函数获取和函数返回函数就足够了。

    最后,我不确定Clojure对宏有什么支持,但它们被认为是lisp的重要组成部分。不过,在您对上述各项非常熟悉之前,我不会担心学习它们——尽管宏非常有用且用途广泛,但与我提到的其他技术相比,它们的使用频率也较低。

        11
  •  1
  •   boutta tomriddle_1234    15 年前
        12
  •  1
  •   Sam    15 年前

    一个巨大的帮助是参加一门课程,比如。。。嗯。。。LISP!:)家庭作业会迫使你们面对很多概念,在学期结束之前很久,我就明白了。

        13
  •  1
  •   Adam Jaskiewicz    15 年前

    祝你好运我花了大约一半的时间才完成了大学的“编程语言”课程,然后计划“点击”。然而,一旦发生了这种情况,一切都变得有意义了,我爱上了函数式编程。

    用Lisp编写一个Lisp解释器。

        14
  •  1
  •   temp2290    15 年前

    如果你还没有读过alrady,那就读一读是什么让lisp成为一种独特的语言。如果您不先这样做,您将尝试在其他一些编程语言中做同样的事情。

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

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

        15
  •  1
  •   Mark Pim    15 年前

    对我来说,重要的是确保你以“口齿不清”的方式做每件事。不要想‘在Java中,我会在这里使用for循环,在Lisp中,我该如何处理for循环?’但是要阅读足够多的示例和教程(正如有人指出的, SICP 这是完美的)当代码看起来是“Lisp-y”时,您可以开始发现并识别公共语言范例。

    我当然知道看到我刚写的一些代码时的感觉,并且直觉地知道它对于该语言和平台/框架来说是正确的习惯用法——我认为,这是当它“点击”时的感觉。

    编辑

        16
  •  1
  •   Flinkman    15 年前

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

    但是如果你想一想在lisp宏后面隐藏多少抽象是可能的。然后你的大脑就会爆炸。

    :)

        17
  •  1
  •   Rayne    15 年前

    我会去查一下编程Clojure。这是一本适合非口齿不清的人的好书。

        18
  •  1
  •   user59634 user59634    15 年前

    除了其他销售员已经提出的建议外,这是我的2美分:

    1. 重要: 将解决方案/代码发布到StackOverflow,征求人们的意见,看这是否真的是LISPy 方法