Redian新闻
>
拿数学函数说FP,那么西格玛函数不就是for loop吗?
avatar
拿数学函数说FP,那么西格玛函数不就是for loop吗?# Programming - 葵花宝典
A*h
1
看到板上大家说延期需要至少两个月批。在没有批之前可以合法居留哪怕是i94过期也
可以。
那如果我只需要给父母延期1各半月,我是不是应该等到最后i94过期前半个月在申请,
这样无论结果如何都可以让父母在多住一个半月?
多谢!
avatar
p*d
3
这样完全可以,有人就是等到最后一天才申请,不管批不批都能呆60-70天。

★ 发自iPhone App: ChineseWeb 7.8

【在 A**h 的大作中提到】
: 看到板上大家说延期需要至少两个月批。在没有批之前可以合法居留哪怕是i94过期也
: 可以。
: 那如果我只需要给父母延期1各半月,我是不是应该等到最后i94过期前半个月在申请,
: 这样无论结果如何都可以让父母在多住一个半月?
: 多谢!

avatar
m*r
4
不用判断,循环, 对函数式编程是自然而然的东西。 不信你拿本数学书,里面见过
循环,判断吗? 很少。
如果鲁迅说他在每行之间都写着‘吃人’二字, 那么数学书里面每行之间都写着‘函
数’
二字。
avatar
h*c
5
Piecewise function就是判断

【在 m******r 的大作中提到】
: 不用判断,循环, 对函数式编程是自然而然的东西。 不信你拿本数学书,里面见过
: 循环,判断吗? 很少。
: 如果鲁迅说他在每行之间都写着‘吃人’二字, 那么数学书里面每行之间都写着‘函
: 数’
: 二字。

avatar
m*r
6
哈哈 我就知道有人会这么说。 piecewise 的情况还是很少,为啥呢 ? 这玩意不可导
, 弄不好都不连续。 左极限都不等于右极限, 看上去就丑陋,所以大家应该尽量避
免。 不信你看世上数学手册物理手册哪个公式用piecewise了 ?

【在 h**c 的大作中提到】
: Piecewise function就是判断
avatar
h*c
7
深度学习全靠piecewise function来引入非线性呢

【在 m******r 的大作中提到】
: 哈哈 我就知道有人会这么说。 piecewise 的情况还是很少,为啥呢 ? 这玩意不可导
: , 弄不好都不连续。 左极限都不等于右极限, 看上去就丑陋,所以大家应该尽量避
: 免。 不信你看世上数学手册物理手册哪个公式用piecewise了 ?

avatar
m*r
8
我们扯的是函数式编程, 这东西本质上是工程师实现数学家论文用的。 比如数学家说
求个SSE, 用函数式编程就是一行字( sum( x - mean(x) ) )^2。
用loop得用好几行。 反正你看看hadley的书,用函数式编程实现加法,推广到矢量相
加,矩阵相加,看起来确实比较好看。

【在 h**c 的大作中提到】
: 深度学习全靠piecewise function来引入非线性呢
avatar
s*w
10
// 计算数字之和
// 一般写法
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
模式。
avatar
h*i
11
你不知道函数都是可以有无数的参数的么?
(+ 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;
: }

avatar
h*i
12
谁跟你说的不能用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

avatar
l*t
14
不用if else是因为有pattern match
avatar
h*3
15
证明里面的if-else不要太多吧

【在 m******r 的大作中提到】
: 不用判断,循环, 对函数式编程是自然而然的东西。 不信你拿本数学书,里面见过
: 循环,判断吗? 很少。
: 如果鲁迅说他在每行之间都写着‘吃人’二字, 那么数学书里面每行之间都写着‘函
: 数’
: 二字。

avatar
d*c
16
我对这个“优化”非常不以为然。在一个函数内部靠一个环境变量来维持状态?这不就
是全局变量吗,只不过放在一个函数内部而已。另外这个写法需要把每个用到的函数都
写到一个大函数里面,难道每用一个新函数就重新定义那个大函数,再多加几个子函数
?怎么不把整个库加进去?什么乱七八糟的。
目的只是要改变写法的话,用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;
: }

avatar
l*o
17
functional programming use recursion to implement loop. That is how scala
does it.
avatar
m*u
18
这个FP整的跟邪教似的。。。。
而且还真有一堆信徒。
avatar
h*c
19
你说的是infix notation和polish notation的区别。函数式语言很多也支持infix
notation,写成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;
: }

avatar
h*c
20
洗去饭是河曲饭是是数理逻辑基本的离散数学里讲的,你没学过吧,
我无意博你的面子,最近被同组人带的,嘴非常直
很长时间不讲中文,得回买买提重温一下国情

【在 m******r 的大作中提到】
: 不用判断,循环, 对函数式编程是自然而然的东西。 不信你拿本数学书,里面见过
: 循环,判断吗? 很少。
: 如果鲁迅说他在每行之间都写着‘吃人’二字, 那么数学书里面每行之间都写着‘函
: 数’
: 二字。

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。