-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
6d09f62
commit 59dbfe2
Showing
4 changed files
with
37 additions
and
37 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,25 +1,25 @@ | ||
# 通过 OCaml 更好地编程 | ||
|
||
你已经知道如何在主流语言如 Python 或 Java 中编程吗?好。这本书是为你准备的。现在是时候学习如何更好地编程了。现在是时候学习一种函数式语言,OCaml。 | ||
你已经掌握了像 Python 或 Java 这样的主流语言的编程技能吗?很好。这本书适合你。是时候学习如何更好地编程了。是时候学习一种函数式语言,OCaml。 | ||
|
||
<iframe width="791" height="445" src="https://www.youtube.com/embed/MUcka_SvhLw" title="Introduction | OCaml Programming | Chapter 1 Video 1" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe> | ||
|
||
函数式编程提供了与你之前经验不同的编程视角。适应这个视角需要放弃老的想法:赋值语句、循环、类和对象等。这不容易。 | ||
函数式编程提供了与您迄今为止所经历的编程不同的视角。适应这种视角需要放弃旧观念:赋值语句、循环、类和对象等。这并不容易。 | ||
|
||
> 南隐(Nan-in),一位日本大师,处于明治时代(1868-1912)。有一位大学教授来询问禅。南隐为客人泡茶。他将客人的杯满溜,然后继续 pours。教授看着流出直到他不能再抑制自己。“已经满了。没有更多的空间!”“像这个杯,”南隐说,“你已经满足自己的见解和推测。如果你想让我向你展示禅,你首先需要空掉你的杯。” | ||
> 南隠(南隐),日本明治时代(1868-1912 年)的一位大师,接待了一位前来探讨禅宗的大学教授。南隠给他倒茶。他将访客的杯子倒满,然后继续倒。教授看着溢出来,直到他再也忍受不住。“满了,再也倒不下去了!”“就像这个杯子一样,”南隠说,“你充满了自己的观点和猜测。除非你先倒空你的杯子,否则我怎么能向你展示禅呢?” | ||
我认为学习 OCaml 将使您成为更好的程序员。以下是原因: | ||
我相信学习 OCaml 会让你成为更好的程序员。以下是原因: | ||
|
||
- 你将体验不可变性的自由,在那里所谓“变量”的值不能改变。告别,调试。 | ||
- 你将通过抽象化的实践,避免重复性,从而提高。再见,臃肿的代码。 | ||
- 你将被暴露在一种类型系统中,你最初会因为它拒绝你认为正确的程序而讨厌。但是,你会爱上它,因为你会谦卑地意识到它是对的,而你的程序是错误的。再见,失败的测试。 | ||
- 你将被暴露一些编程语言的理论和实现,帮助你理解当你编写代码时对计算机所说的基础。再见,神秘且魔法咒语。 | ||
- 您将体验到不可变性的自由,其中所谓的“变量”的值无法更改。再见,调试。 | ||
- 您将在抽象化方面有所提高,这是通过提取共性来避免重复的实践。再见,臃肿的代码。 | ||
- 你将接触到一种类型系统,起初你会讨厌它,因为它会拒绝你认为是正确的程序。但你会逐渐喜欢它,因为你会谦卑地意识到它是正确的,而你的程序是错误的。再见,失败的测试。 | ||
- 您将接触到一些编程语言的理论和实现,帮助您理解在编写代码时向计算机传达的基础知识。告别神秘和魔法般的咒语。 | ||
|
||
所有这些想法都可以在其他上下文和语言中学习。但 OCaml 提供了一个让你将它们全部捆绑起来的绝佳机会。OCaml 将改变你的编程方式。 | ||
所有这些想法都可以在其他背景和语言中学习。但 OCaml 提供了一个难得的机会将它们全部捆绑在一起。OCaml 将改变你对编程的思考方式。 | ||
|
||
> “没有影响你对编程的思考方式的语言不值得学习。” | ||
> —阿兰·J·佩尔斯(1922-1990),图灵奖的首个受奖者 | ||
> “一种不影响你对编程思考方式的语言是不值得学习的。” | ||
> —艾伦·J·佩里斯(1922-1990 年),图灵奖的首位获得者 | ||
此外,OCaml 很美丽。OCaml 优雅、简单、优雅。美学确实重要。代码不仅是为了机器执行,还要与人类交流。优雅的代码更容易阅读和维护。并不一定更容易编写。 | ||
此外,OCaml 是美丽的。OCaml 优雅、简洁、优美。美学很重要。代码不仅仅是为了让机器执行而编写的。它也是为了与人类沟通而编写的。优雅的代码更易阅读和维护。编写优雅的代码并不一定更容易。 | ||
|
||
OCaml 代码你写的可以是时尚和有风格的。起初,这可能不太明显。你学习一种新的语言—you 不会在 Introductory Sanskrit 的第一天期望欣赏梵文诗歌的。实际上,你可能会感到沮丧一段时间,因为你努力表达自己在新语言中。但是,给它一些时间。等你掌握了 OCaml,你可能会惊讶地发现,当你返回已知的其他语言时,它们看起来多么丑陋。 | ||
你写的 OCaml 代码可以是时尚和有品位的。起初,这可能并不明显。毕竟,你正在学习一门新语言——你不会期望在初学梵文的第一天就欣赏梵文诗歌。事实上,当你努力用一门新语言表达自己时,你可能会感到沮丧一段时间。所以给自己一些时间。当你掌握了 OCaml 之后,当你回到其他你已经了解的语言时,你可能会惊讶地发现它们变得多么丑陋。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,11 @@ | ||
# OCaml 的过去 | ||
|
||
OCaml 的 genealogy 来自于一系 programming 语言,祖先是 Lisp,还包括其他现代语言,如 Clojure、F#、Haskell 和 Racket。 | ||
从家族谱的角度来看,OCaml 来自编程语言的血统,其祖父是 Lisp,包括其他现代语言如 Clojure、F#、Haskell 和 Racket。 | ||
|
||
OCaml 源自英国苏格兰爱丁堡计算机科学实验室 Robin Milner 等人的工作。他们在 1970 年代末期 1980 年代初期从事定理证明器的开发。传统上,定理证明器都是使用 Lisp 语言实现的。Milner 不断遇到问题,即定理证明器会将非正确的“证据”(即非证据)组合起来,并声称它们是有效的。因此,他尝试开发一种只允许您构建有效证据的语言。ML(Meta Language)的结果就是这种工作。ML 语言的类型系统被精心设计,以便只能在该语言中构建有效证据。然后,写了一款定理证明器程序,该程序构建了证据。最终,这种“Classic ML”演变为了一门完整的编程语言。 | ||
OCaml 起源于苏格兰爱丁堡计算机科学实验室的罗宾·米尔纳(Robin Milner)等人的工作。他们在 1970 年代末和 1980 年代初致力于定理证明器。传统上,定理证明器是用诸如 Lisp 之类的语言实现的。米尔纳一直遇到一个问题,即定理证明器有时会将不正确的“证明”(即非证明)组合在一起,并声称它们是有效的。因此,他尝试开发一种只允许您构建有效证明的语言。ML 代表“元语言”,是该工作的结果。ML 的类型系统经过精心构建,以便您只能在该语言中构建有效证明。然后,定理证明器被编写为一个构建证明的程序。最终,这种“经典 ML”演变成了一种成熟的编程语言。 | ||
|
||
早期 80 年代,ML 社区出现了分歧,法国一方和英国、美国另一方。法国方面发展出了 CAML,并后续开发出 Objective CAML(OCaml),而英国和美国则发展出了 Standard ML。这两个方言非常相似。微软在 2005 年引入了一种名为 F#的 OCaml 变体。 | ||
在 80 年代初,机器学习领域出现了一场分裂,法国人站在一边,英国人和美国人站在另一边。法国人继续发展了 CAML,后来发展出了 Objective CAML(OCaml),而英国人和美国人则发展了 Standard ML。这两种方言非常相似。微软在 2005 年推出了自己的 OCaml 变体,称为 F#。。 | ||
|
||
Milner 得到了 1991 年的图灵奖,主要是由于他对 ML 的工作。ACM 为他的奖项网站上写道: Milner 得到了 1991 年的图灵奖,主要是由于他对 ML 的工作。[ACM]((https://amturing.acm.org/award_winners/milner_1569367.cfm) 为他的奖项网站上写道: | ||
Milner 在 1991 年因其在 ML 领域的工作而获得了图灵奖。[ACM]((https://amturing.acm.org/award_winners/milner_1569367.cfm) 为他的奖项所做的网站包括了这样的赞美: | ||
|
||
> ML 确实是时代的先驱。它基于清晰和有条理的数学思想,分解开来,使其可以独立研究和相对容易地重新混合和重复使用。ML 对许多实际语言产生了影响,包括 Java、Scala 和 Microsoft 的 F#。事实上,没有严肃的语言设计师应该忽视这个好的设计例子。 | ||
> ML 远远领先于其时代。它建立在清晰和明确的数学思想之上,这些思想被拆分开来,以便能够独立研究,并相对容易地重新混合和重复使用。ML 已经影响了许多实用语言,包括 Java、Scala 和微软的 F#。事实上,任何认真的语言设计者都不应忽视这个优秀设计的例子。 |
Oops, something went wrong.