Giter Site home page Giter Site logo

llh911001 / mostly-adequate-guide-chinese Goto Github PK

View Code? Open in Web Editor NEW
2.5K 75.0 330.0 3.84 MB

函数式编程指南中文版

Home Page: https://llh911001.gitbook.io/mostly-adequate-guide-chinese

License: Other

HTML 0.64% JavaScript 99.36%
functional-programming functional-js functor curry monad

mostly-adequate-guide-chinese's Introduction

This is the Simplified Chinese translation of mostly-adequate-guide, thank Professor Franklin Risby for his great work!

关于本书

这本书的主题是函数范式(functional paradigm),我们将使用 JavaScript 这门世界上最流行的函数式编程语言来讲述这一主题。有人可能会觉得选择 JavaScript 并不明智,因为当前的主流观点认为它是一门命令式(imperative)的语言,并不适合用来讲函数式。但我认为,这是学习函数式编程的最好方式,因为:

  • 你很有可能在日常工作中使用它

    这让你有机会在实际的编程过程中学以致用,而不是在空闲时间用一门深奥的函数式编程语言做一些玩具性质的项目。

  • 你不必从头学起就能开始编写程序

    在纯函数式编程语言中,你必须使用 monad 才能打印变量或者读取 DOM 节点。JavaScript 则简单得多,可以作弊走捷径,因为毕竟我们的目的是学写纯函数式代码。JavaScript 也更容易入门,因为它是一门混合范式的语言,你随时可以在感觉吃力的时候回退到原有的编程习惯上去。

  • 这门语言完全有能力书写高级的函数式代码

    只需借助一到两个微型类库,JavaScript 就能模拟 Scala 或 Haskell 这类语言的全部特性。虽然面向对象编程(Object-oriented programing)主导着业界,但很明显这种范式在 JavaScript 里非常笨拙,用起来就像在高速公路上露营或者穿着橡胶套鞋跳踢踏舞一样。我们不得不到处使用 bind 以免 this 不知不觉地变了,语言里没有类可以用(目前还没有),我们还发明了各种变通方法来应对忘记调用 new 关键字后的怪异行为,私有成员只能通过闭包(closure)才能实现,等等。对大多数人来说,函数式编程看起来更加自然。

以上说明,强类型的函数式语言毫无疑问将会成为本书所示范式的最佳试验场。JavaScript 是我们学习这种范式的一种手段,将它应用于什么地方则完全取决于你自己。幸运的是,所有的接口都是数学的,因而也是普适的。最终你会发现你习惯了 swiftz、scalaz、haskell 和 purescript,以及其他各种数学偏向的语言。

Gitbook (更好的阅读体验)

目录

第 1 部分

第 2 部分

未来计划

  • 第 1 部分是基础知识。这是初版草稿,所以我会及时更正发现的的错误。欢迎提供帮助!
  • 第 2 部分讲述类型类(type class),比如 functor 和 monad,最后会讲到到 traversable。我希望能塞进来一些 monad transformer 相关的知识,再写一个纯函数的应用。
  • 第 3 部分将开始游走于编程实践与学院学究之间。我们将学习 comonad、f-algebra、free monad、yoneda 以及其他一些范畴学概念。

mostly-adequate-guide-chinese's People

Contributors

andor233 avatar betarabbit avatar bpceee avatar chentsulin avatar cigui avatar garzon avatar huzidaha avatar kaygnas avatar llh911001 avatar m4jing avatar owenyang0 avatar shhhplus avatar solome avatar wwmmzz avatar zicai avatar zliy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mostly-adequate-guide-chinese's Issues

关于第十一章翻译

Hi, llh911001

感谢你之前的翻译,让我学习到了许多。最近翻看原作者的文章,发现已经有 11 章和 12 章的内容。不知道大佬是否有精力继续翻译。

期待。 😆

第一章 some celestial compass for when the waters get rough

原文翻译

就像《激战》游戏里当水变成石头的时候你需要天国罗盘来指引

我对这句话的理解是:
就像当水变得很急,洶涌的时候你需要天文罗盘来指引。

总是想象不出水变成石头。

您觉得呢?

第8章把野兽从笼子里放出来的例子 注释里的输出结果应该是个二维数组

////// 纯代码库: lib/params.js /////// // url :: IO String
var url = new IO(function() { return window.location.href; });
//  toPairs =  String -> [[String]]
var toPairs = compose(map(split('=')), split('&'));
//  params :: String -> [[String]]
var params = compose(toPairs, last, split('?'));
//  findParam :: String -> IO Maybe [String]
var findParam = function(key) {
  return map(compose(Maybe.of, filter(compose(eq(key), head)), p
arams), url);
};
////// 非纯调用代码: main.js ///////
// 调用 __value() 来运行它!
findParam("searchTerm").__value();
// Maybe(['searchTerm', 'wafflehouse'])

我这边输出结果是个二维数组

// Maybe([['searchTerm', 'wafflehouse']])

🚨 警报!立即领取您的 $1000 快速奖励,现在就是时候在 $PYTH 中了!

🚀 领取您的份额:Pyth Network 空投 🚀

  • 🌐 共有 60 亿 PYTH 代币等您来抢!
  • 🔗 Pyth Network:您可靠的市场数据之门户

Pyth Network Logo

🔍 有资格的参与者:

  • EVM 生态系统 (以太坊, Arbitrum 等)
  • Move 生态系统 (Aptos, Sui)
  • Cosmos 生态系统 (Evmos, Osmosis 等)
  • Solana 生态系统
  • 特殊 Discord 角色用户
  • Pyth NFT 持有者

📅 快照日期:

  • On-chain 活动: 2023 年 9 月 1 日
  • Discord 角色和 NFT 持有者: 2023 年 10 月 25 日

📌 按步骤指南领取您的 PYTH 代币!

  1. 在社交媒体上分享:

  2. 连接您的钱包:

    • 访问 $PYTH Airdrop.
    • 连接您偏好的钱包(Metamask、Coinbase、Trust Wallet 等)。
  3. 验证资格:
    在分享和连接您的钱包后,等待 24 小时以验证您的资格。

Join the org

Please, consider moving this repo to the org, to keep all translations together.

第5章debug部分

第5章debug部分第三个代码块和第二个代码块中的dasherize不太一样..应该是第三个块的compose顺序错了,而且少了个toLower

还有第四个代码块的// 'The-world-is-a-vampire'运行结果无视掉了toLower的存在...

翻译错误:第四章柯里化中的练习

在第四章柯里化中的联系的最后一个彩蛋里 :
https://github.com/llh911001/mostly-adequate-guide-chinese/blame/master/ch4.md#L193
题目是:

// use slice to define a function "take" that takes n elements. Make it curried
翻译出来的是:
// 借助 slice 定义一个 take curry 函数,接受 n 个元素为参数。

不是接受"n个元素为参数",应该是取出n个元素。

题目的意思用slice去定义一个函数“take”,能从数组中取出n个元素。

练习部分的翻译

来回看了2遍了

感觉在 练习部分的翻译做得不好, 很容易误导读者

// 练习 1
//==============
// 通过局部调用(partial apply)移除所有参数
var words = function(str) {
return split(' ', str);
};

// 彩蛋 2:
// ============
// 借助 slice 定义一个 take curry 函数,接受 n 个元素为参数。
var take = undefined;

这两题 很大程度上误导了我...

第七章 "自由定理" 中的 "free" 是否应该翻译为 "免费的" ?

  1. 已经google过,除本文之外没有自由定理的解释
  2. 文中提到 Wadler 关于此主题的论文

论文标题:theorems for free
摘要:From the type of a polymorphic function we can derive a theorem that it satisfies. Every Function of the same type satisfies the same theorem. This provides a free source of useful theorems, courtesy of Reynolds' abstraction theorem for the polymorphic lambda calculus.

  1. 原文标题:Free as in Theorem 可以翻译成免费的
  2. 原文:"不用写一行代码你也能理解这些定理,它们直接来自于类型本身。" 译为免费的更符合上下文

第8章typo

因为对 IO 调用 map 已经已经积累了太多不纯的操作

顺便期待一下第10章的翻译

第七章的一个翻译错误

“这两个表达式的作用是相等的,但是后者要快得多。”
应该为 “这两个表达式的作用是相等的,但是前者要快得多。”

some mistake in ch4: exercise 1

我觉得
var words = function(str) { return split(' ', str); };
应修改为:
var words = function(str) { return split(str, ' '); };
不然实现不了分词效果

第四章中练习部分翻译意思不明确。

// 1. 重构使之成为一个 curry 函数
//原文: Refactor to remove all arguments by partially applying the function.
“重构使之成为一个 curry 函数” 对于初学者来说太难理解,而原文较清晰 “通过重构函数部分移除所有参数”。

//1a. 使用 map 创建一个新函数,使之能够操作字符串数组
//原文:Use map to make a new words fn that works on an array of strings.
原文说使用 map 创建一个新的 words 函数,我看了答案才明白原来与第一题有关联,才明白为什么题目编号是 1a。

在“代码组合——函数饲养”一节里发现了个错误

...
...
// 前面的例子中我们必须要写两个组合才行,但既然组合是符合结合律的,我们就可以只写一个,
// 而且想传给它多少个函数就传给它多少个,然后让它自己决定如何分组。

var lastUpper = compose(toUpperCase, head, reverse);

lastUpper(['jumpkick', 'roundhouse', 'uppercut']);
//=> 'UPPERCUT'

在上述代码中,我个人计算的和控制台输出的答案都是"JUMPKICK"。还望作者确认一下,不知道到底是我搞错了还是您大意了、

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.