拿数学函数说FP,那么西格玛函数不就是for loop吗?# Programming - 葵花宝典A*h2018-08-25 07:081 楼看到板上大家说延期需要至少两个月批。在没有批之前可以合法居留哪怕是i94过期也可以。那如果我只需要给父母延期1各半月,我是不是应该等到最后i94过期前半个月在申请,这样无论结果如何都可以让父母在多住一个半月?多谢!
s*w2018-08-25 07:082 楼FP 不能用for loop, 不能用if/elese,是不是太过了?https://zh.wikipedia.org/wiki/%E6%B1%82%E5%92%8C%E7%AC%A6%E5%8F%B7
p*d2018-08-25 07:083 楼这样完全可以,有人就是等到最后一天才申请,不管批不批都能呆60-70天。★ 发自iPhone App: ChineseWeb 7.8【在 A**h 的大作中提到】: 看到板上大家说延期需要至少两个月批。在没有批之前可以合法居留哪怕是i94过期也: 可以。: 那如果我只需要给父母延期1各半月,我是不是应该等到最后i94过期前半个月在申请,: 这样无论结果如何都可以让父母在多住一个半月?: 多谢!
m*r2018-08-25 07:084 楼不用判断,循环, 对函数式编程是自然而然的东西。 不信你拿本数学书,里面见过循环,判断吗? 很少。如果鲁迅说他在每行之间都写着‘吃人’二字, 那么数学书里面每行之间都写着‘函数’二字。
h*c2018-08-25 07:085 楼Piecewise function就是判断【在 m******r 的大作中提到】: 不用判断,循环, 对函数式编程是自然而然的东西。 不信你拿本数学书,里面见过: 循环,判断吗? 很少。: 如果鲁迅说他在每行之间都写着‘吃人’二字, 那么数学书里面每行之间都写着‘函: 数’: 二字。
m*r2018-08-25 07:086 楼哈哈 我就知道有人会这么说。 piecewise 的情况还是很少,为啥呢 ? 这玩意不可导, 弄不好都不连续。 左极限都不等于右极限, 看上去就丑陋,所以大家应该尽量避免。 不信你看世上数学手册物理手册哪个公式用piecewise了 ?【在 h**c 的大作中提到】: Piecewise function就是判断
h*c2018-08-25 07:087 楼深度学习全靠piecewise function来引入非线性呢【在 m******r 的大作中提到】: 哈哈 我就知道有人会这么说。 piecewise 的情况还是很少,为啥呢 ? 这玩意不可导: , 弄不好都不连续。 左极限都不等于右极限, 看上去就丑陋,所以大家应该尽量避: 免。 不信你看世上数学手册物理手册哪个公式用piecewise了 ?
m*r2018-08-25 07:088 楼我们扯的是函数式编程, 这东西本质上是工程师实现数学家论文用的。 比如数学家说求个SSE, 用函数式编程就是一行字( sum( x - mean(x) ) )^2。用loop得用好几行。 反正你看看hadley的书,用函数式编程实现加法,推广到矢量相加,矩阵相加,看起来确实比较好看。【在 h**c 的大作中提到】: 深度学习全靠piecewise function来引入非线性呢
x*42018-08-25 07:089 楼FP没说不能用loop和if else啊。FP说的是程序不要依赖于side effects。【在 s*****w 的大作中提到】: FP 不能用for loop, 不能用if/elese,是不是太过了?: https://zh.wikipedia.org/wiki/%E6%B1%82%E5%92%8C%E7%AC%A6%E5%8F%B7
s*w2018-08-25 07:0810 楼// 计算数字之和// 一般写法console.log(1 + 2 + 3 - 4)// 函数式写法function sum(a, b) {return a + b;}function sub(a, b) {return a - b;}console.log(sub(sum(sum(1, 2), 3), 4);本例仅为展示 横向延展 的比较极端的情况,随着函数的嵌套层数不断增多,导致代码的可读性大幅下降,还很容易产生错误。在这种情况下,我们可以考虑多种优化方式,比如下面的 链式优化 。// 优化写法 (嗯,你没看错,这就是 lodash 的链式写法)const utils = {chain(a) {this._temp = a;return this;},sum(b) {this._temp += b;return this;},sub(b) {this._temp -= b;return this;},value() {const _temp = this._temp;this._temp = undefined;return _temp;}};console.log(utils.chain(1).sum(2).sum(3).sub(4).value());这样改写后,结构会整体变得比较清晰,而且链的每一环在做什么也可以很容易的展现出来。函数的嵌套和链式的对比还有一个很好的例子,那就是 回调函数 和 Promise模式。
h*i2018-08-25 07:0811 楼你不知道函数都是可以有无数的参数的么?(+ 1 2 3 4 5 6 7 8)(- (+ 1 2 3) 4 2 1)【在 s*****w 的大作中提到】: // 计算数字之和: // 一般写法: console.log(1 + 2 + 3 - 4): // 函数式写法: function sum(a, b) {: return a + b;: }: function sub(a, b) {: return a - b;: }
h*i2018-08-25 07:0812 楼谁跟你说的不能用if/else的。循环和for loop可不是一回事。for loop必须要mutate循环变量,所以FP一般不用。但FP也有binding,list comprehension这些,写起循环来也很方便。(for [i (range 3)] (inc i)) => (1 2 3)【在 s*****w 的大作中提到】: FP 不能用for loop, 不能用if/elese,是不是太过了?: https://zh.wikipedia.org/wiki/%E6%B1%82%E5%92%8C%E7%AC%A6%E5%8F%B7
n*p2018-08-25 07:0813 楼建议看看这个series: http://www.youtube.com/watch?v=DN6YqrI8aLk&index=6&list=PLi_wLqvICdX_3yT1cEbcWuDSx70fAHmaJ可以提高函数式写法功力【在 s*****w 的大作中提到】: // 计算数字之和: // 一般写法: console.log(1 + 2 + 3 - 4): // 函数式写法: function sum(a, b) {: return a + b;: }: function sub(a, b) {: return a - b;: }
h*32018-08-25 07:0815 楼证明里面的if-else不要太多吧【在 m******r 的大作中提到】: 不用判断,循环, 对函数式编程是自然而然的东西。 不信你拿本数学书,里面见过: 循环,判断吗? 很少。: 如果鲁迅说他在每行之间都写着‘吃人’二字, 那么数学书里面每行之间都写着‘函: 数’: 二字。
d*c2018-08-25 07:0816 楼我对这个“优化”非常不以为然。在一个函数内部靠一个环境变量来维持状态?这不就是全局变量吗,只不过放在一个函数内部而已。另外这个写法需要把每个用到的函数都写到一个大函数里面,难道每用一个新函数就重新定义那个大函数,再多加几个子函数?怎么不把整个库加进去?什么乱七八糟的。目的只是要改变写法的话,用pipe operator就可以了,总是传入一个参数,传出一个参数,然后写的时候不用显式写那个中间变量。javascript里pipe operator 还是实验性的 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Pipeline_operator),但是在js里“函数式”解决“这个问题”本身就是个非常坏的例子。【在 s*****w 的大作中提到】: // 计算数字之和: // 一般写法: console.log(1 + 2 + 3 - 4): // 函数式写法: function sum(a, b) {: return a + b;: }: function sub(a, b) {: return a - b;: }
l*o2018-08-25 07:0817 楼functional programming use recursion to implement loop. That is how scaladoes it.
h*c2018-08-25 07:0819 楼你说的是infix notation和polish notation的区别。函数式语言很多也支持infixnotation,写成1 + 2 + 3 - 4没问题【在 s*****w 的大作中提到】: // 计算数字之和: // 一般写法: console.log(1 + 2 + 3 - 4): // 函数式写法: function sum(a, b) {: return a + b;: }: function sub(a, b) {: return a - b;: }
h*c2018-08-25 07:0820 楼洗去饭是河曲饭是是数理逻辑基本的离散数学里讲的,你没学过吧,我无意博你的面子,最近被同组人带的,嘴非常直很长时间不讲中文,得回买买提重温一下国情【在 m******r 的大作中提到】: 不用判断,循环, 对函数式编程是自然而然的东西。 不信你拿本数学书,里面见过: 循环,判断吗? 很少。: 如果鲁迅说他在每行之间都写着‘吃人’二字, 那么数学书里面每行之间都写着‘函: 数’: 二字。