由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - robpike 老流氓
相关主题
两道Java面试问题数组,结构,类在数值计算中哪个快
prototype和abstract factory的区别Python日报 2014-12-04: 7个测量Python脚本和控制内存以及CPU使用率的技巧 等
factory and abstract factory 的区别倡议使用 半空格 为分隔符 做为 中文的书写方式。
FPGA-based DNNsDeepmind,蜘蛛坦克,小笼包(zz)
word真他妈的坑爹DeepMind创始人自述:我们的算法可以横扫一切棋类博弈
我们来聊聊paradigms吧请教一下,各位牛人觉得Rust语言怎么样?
Java 不是纯oo, oo 不是 imperative programmingDNN就是hype (转载)
写Python 的苦恼之一:有人当c用,有人当bash用,有人当FP用。当然也有人当python用问几个神经网络的问题
相关话题的讨论汇总
话题: br话题: factorial话题: cp话题: function
进入Programming版参与讨论
1 (共1页)
g****t
发帖数: 31659
1
from github robpike
robpike写了个apply,filter,etc然后加上了如下的话:
I wanted to see how hard it was to implement this sort of thing in Go, with
as nice an API as I could manage. It wasn't hard.
Having written it a couple of years ago, I haven't had occasion to use it
once. Instead, I just use "for" loops.
You shouldn't use it either.
// Package filter contains utility functions for filtering slices through
the
// distributed application of a filter function.
//
// The package is an experiment to see how easy it is to write such things
// in Go. It is easy, but for loops are just as easy and more efficient.
//
// You should not use this package.
//
h*i
发帖数: 3446
2
He's not getting the point. It's not about how hard to implement this. It's
about moving up the ladder of abstraction.
It's not even hard to implement anything in assembly. But why would you want
to?
"The field is advanced one funeral at a time".
Applies to any field.
For example, Go is simply reactionary, archaic, and going against the force
of nature in computer science.

with

【在 g****t 的大作中提到】
: from github robpike
: robpike写了个apply,filter,etc然后加上了如下的话:
: I wanted to see how hard it was to implement this sort of thing in Go, with
: as nice an API as I could manage. It wasn't hard.
: Having written it a couple of years ago, I haven't had occasion to use it
: once. Instead, I just use "for" loops.
: You shouldn't use it either.
: // Package filter contains utility functions for filtering slices through
: the
: // distributed application of a filter function.

g****t
发帖数: 31659
3
这些道理他们都懂。Ken Thompson 图灵奖讲话第一个例子就是C的固定点。一个printf
出自身的程序。
这些话就是街头卖艺...


: He's not getting the point. It's not about how hard to implement
this.
It's

: about moving up the ladder of abstraction.

: It's not even hard to implement anything in assembly. But why
would
you want

: to?

: "The field is advanced one funeral at a time".

: Applies to any field.

: For example, Go is simply reactionary, archaic, and going
against the
force

: of nature in computer science.

: with



【在 h*i 的大作中提到】
: He's not getting the point. It's not about how hard to implement this. It's
: about moving up the ladder of abstraction.
: It's not even hard to implement anything in assembly. But why would you want
: to?
: "The field is advanced one funeral at a time".
: Applies to any field.
: For example, Go is simply reactionary, archaic, and going against the force
: of nature in computer science.
:
: with

m******r
发帖数: 1033
4
海老师,能不能用大白话说说下面这个段子是怎么回事? 别说那么高深的,就说3是怎
么和2乘, 又和1乘的。 这个东西叫 continuation_passing style, R里面的。
这个段子摘自 by thomas mailund
cp_factorial <- function(n, continuation = identity) {
if (n == 1) {
continuation(1)
} else {
new_continuation <- function(result) {
continuation(result * n)
}
cp_factorial(n - 1, new_continuation)
}
}

cp_factorial(3) .
说说我的理解, 第一步是cp_factorial(2, new_continuation), 然后变成cp_
factorial(2, result*3) 因为第一步continuation = identity,
然后第二步? 我就不会了。 是不是 cp_factorial(1 , result*3*2) ??

s
want
force

【在 h*i 的大作中提到】
: He's not getting the point. It's not about how hard to implement this. It's
: about moving up the ladder of abstraction.
: It's not even hard to implement anything in assembly. But why would you want
: to?
: "The field is advanced one funeral at a time".
: Applies to any field.
: For example, Go is simply reactionary, archaic, and going against the force
: of nature in computer science.
:
: with

g****t
发帖数: 31659
5
目测你的理解是对的。这段代码用了CPS的办法。
但并不是谁这就是CPS的全部。
我的理解CPS的根源是用function call来实现loop, goto灯的一个技术。最早是turing
一个论文出现的。我以前贴过。


: 海老师,能不能用大白话说说下面这个段子是怎么回事? 别说那么高深的,就
说3是怎

: 么和2乘, 又和1乘的。 这个东西叫 continuation_passing style, R里面的。

: 这个段子摘自 by thomas mailund

: cp_factorial
: if (n == 1) {

: continuation(1)

: } else {

: new_continuation
: continuation(result * n)

: }



【在 m******r 的大作中提到】
: 海老师,能不能用大白话说说下面这个段子是怎么回事? 别说那么高深的,就说3是怎
: 么和2乘, 又和1乘的。 这个东西叫 continuation_passing style, R里面的。
: 这个段子摘自 by thomas mailund
: cp_factorial <- function(n, continuation = identity) {
: if (n == 1) {
: continuation(1)
: } else {
: new_continuation <- function(result) {
: continuation(result * n)
: }

m******r
发帖数: 1033
6
死了三千六百五二个脑细胞,总算想明白, 该过程如下:
cp_factorial(3)
cp_factorial(2, result * 3 )
cp_factorial(1, result * 2 * 3 )
1 * 2 * 3
其实就是表达式在里面传递, 这表达式如果不打出来给人看, 还真是别扭。
这种用法确实有点精妙之处, 思路和传统递归不一样, 传统思路是跟踪数字变化,这
个段子是跟踪表达式逐渐变化, 不知海老师有什么方法能把上面几行给打出来。
g****t
发帖数: 31659
7
恭喜你。你自己搞定了麦卡锡lisp文章里面的一个段落。
scheme的作者还给这个trick起了个牛X的名字,好像又写了个名著。
这个思路是lift up到了多一个参数的函数。和数学里的传统continuation技术是一样
的。谁给的这个名字“continuation pass style”似乎已不可考。但给这个名字的,
我觉得一定是algorithm的大能。
=====================================================
例如x+2=3你会求解。
但是
x**2 + x + 2 =3 ....(1)
如何求解?
牛顿的办法就是引入一个参数p。
let y = x+p
replace y into (1), omit the higher order terms of p.
Then let z = y +q
....
===============================
In modern DNN system, a number 1 is lifted up to 1+p.
That is the root of the autograd algorithm.
https://blog.demofox.org/2014/12/30/dual-numbers-automatic-differentiation/

【在 m******r 的大作中提到】
: 死了三千六百五二个脑细胞,总算想明白, 该过程如下:
: cp_factorial(3)
: cp_factorial(2, result * 3 )
: cp_factorial(1, result * 2 * 3 )
: 1 * 2 * 3
: 其实就是表达式在里面传递, 这表达式如果不打出来给人看, 还真是别扭。
: 这种用法确实有点精妙之处, 思路和传统递归不一样, 传统思路是跟踪数字变化,这
: 个段子是跟踪表达式逐渐变化, 不知海老师有什么方法能把上面几行给打出来。

g****t
发帖数: 31659
8
https://people.cs.umass.edu/~emery/classes/cmpsci691st/readings/PL/LISP.pdf
enjoy!
function callings == flowchart control loop

【在 g****t 的大作中提到】
: 恭喜你。你自己搞定了麦卡锡lisp文章里面的一个段落。
: scheme的作者还给这个trick起了个牛X的名字,好像又写了个名著。
: 这个思路是lift up到了多一个参数的函数。和数学里的传统continuation技术是一样
: 的。谁给的这个名字“continuation pass style”似乎已不可考。但给这个名字的,
: 我觉得一定是algorithm的大能。
: =====================================================
: 例如x+2=3你会求解。
: 但是
: x**2 + x + 2 =3 ....(1)
: 如何求解?

w***g
发帖数: 5958
9
有没有觉得结构化编程语言是一个巨大的历史进步?各种脑子不好的人也都可以写程序
了。

:死了三千六百五二个脑细胞,总算想明白, 该过程如下:
:cp_factorial(3)
g****t
发帖数: 31659
10
高见,对单个程序任务来讲。结构化编程优势很大。降低了写程序的门槛。
但有个副作用。结构化编程可以实现任意goto也要死掉很多脑细胞才能完整的证明。这
个事实被自然地忽略掉了。


: 有没有觉得结构化编程语言是一个巨大的历史进步?各种脑子不好的人也都可以
写程序

: 了。

: :死了三千六百五二个脑细胞,总算想明白, 该过程如下:

: :cp_factorial(3)



【在 w***g 的大作中提到】
: 有没有觉得结构化编程语言是一个巨大的历史进步?各种脑子不好的人也都可以写程序
: 了。
:
: :死了三千六百五二个脑细胞,总算想明白, 该过程如下:
: :cp_factorial(3)

相关主题
我们来聊聊paradigms吧数组,结构,类在数值计算中哪个快
Java 不是纯oo, oo 不是 imperative programmingPython日报 2014-12-04: 7个测量Python脚本和控制内存以及CPU使用率的技巧 等
写Python 的苦恼之一:有人当c用,有人当bash用,有人当FP用。当然也有人当python用倡议使用 半空格 为分隔符 做为 中文的书写方式。
进入Programming版参与讨论
m******r
发帖数: 1033
11
多谢楼上鼓励。 七八行的小东西我想了两天, 一开始还误以为continuation是R里面
的特殊函数 到文档里找了半天。 幸亏不是干这行的 不然死的很难看。
g****t
发帖数: 31659
12
NI HEN NIU
NI MEI YOU FANG QI
ZHE GE HEN NAN ZI JI NONG QING CHU

【在 m******r 的大作中提到】
: 多谢楼上鼓励。 七八行的小东西我想了两天, 一开始还误以为continuation是R里面
: 的特殊函数 到文档里找了半天。 幸亏不是干这行的 不然死的很难看。

h*i
发帖数: 3446
13
CPS is not a high level abstraction. It's a trick for program transformation
, often used as an intermediate representation to implement something
difficult without having to extend the base language.
For example, in Clojure, people have used similar tricks to implement
asynchronous primitives (like those in golang) as a library (e.g. core.async
), or to implement Bayesian probabilistic programming primitives (e.g.
Anglican).
These tricks are possible in Clojure because it is a Lisp, so you can use
macros to implement them without having to extend the language itself.
These things are not what I talk about regarding high level abstraction.
Map, filter, etc are what I actually refer to. These let you move away from
how things are implemented, and think in thoughts that are closer to how a
lay person (non programmers, basically) think about things.
With these high level abstraction, you have to think in logic steps, and
each step does one thing only. Whereas a for-loop, you are not think in
logical steps, you are simulating a von-neumann computer in your head, that'
s
why people have hard time learning programming. As soon as for-loop is
introduced, half of the class will drop off.

【在 m******r 的大作中提到】
: 海老师,能不能用大白话说说下面这个段子是怎么回事? 别说那么高深的,就说3是怎
: 么和2乘, 又和1乘的。 这个东西叫 continuation_passing style, R里面的。
: 这个段子摘自 by thomas mailund
: cp_factorial <- function(n, continuation = identity) {
: if (n == 1) {
: continuation(1)
: } else {
: new_continuation <- function(result) {
: continuation(result * n)
: }

h*i
发帖数: 3446
14
I don't think they get it. Most people here don't get it either.
Because it's hard to imagine a time when you have not learned programming.
People lack the ability to introspect a past self.

printf

【在 g****t 的大作中提到】
: 这些道理他们都懂。Ken Thompson 图灵奖讲话第一个例子就是C的固定点。一个printf
: 出自身的程序。
: 这些话就是街头卖艺...
:
:
: He's not getting the point. It's not about how hard to implement
: this.
: It's
:
: about moving up the ladder of abstraction.
:
: It's not even hard to implement anything in assembly. But why
: would

n******7
发帖数: 12463
15
我看了一下这个code,确实有点绕
不过我觉得不是这个概念多复杂,而是因为人脑的memory非常有限,需要跟踪的量一多
就oom了
这段code的问题在这里
new_continuation <- function(result) {
continuation(result * n)
}
又是result 又是new_continuation的,
这两个东西现在没用,result本身又是个有意义的词
一下把人绕晕了
其实把这个东西当做匿名函数放到调用里面就好多了
我把ifelse也放一起了,你看是不是容易理解多了?
cp_factorial <- function(n, continuation = identity)
ifelse(n == 1, continuation(1), cp_factorial(n - 1, function(x)
continuation(x * n)))
另外一个绕的地方是function composition
执行过程写出来就是
cp_factorial(2, function(x) identity(x * 3))
cp_factorial(1, function(x) identity((x * 2) * 3))
identity((1 * 2) * 3)


: 海老师,能不能用大白话说说下面这个段子是怎么回事? 别说那么高深的,就
说3是怎

: 么和2乘, 又和1乘的。 这个东西叫 continuation_passing style, R里面的。

: 这个段子摘自 by thomas mailund

: cp_factorial
: if (n == 1) {

: continuation(1)

: } else {

: new_continuation
: continuation(result * n)

: }



【在 m******r 的大作中提到】
: 多谢楼上鼓励。 七八行的小东西我想了两天, 一开始还误以为continuation是R里面
: 的特殊函数 到文档里找了半天。 幸亏不是干这行的 不然死的很难看。

m******r
发帖数: 1033
16
thanks for helping. Your code is working !
祝狗年顺利!

【在 n******7 的大作中提到】
: 我看了一下这个code,确实有点绕
: 不过我觉得不是这个概念多复杂,而是因为人脑的memory非常有限,需要跟踪的量一多
: 就oom了
: 这段code的问题在这里
: new_continuation <- function(result) {
: continuation(result * n)
: }
: 又是result 又是new_continuation的,
: 这两个东西现在没用,result本身又是个有意义的词
: 一下把人绕晕了

m******r
发帖数: 1033
17
大师高屋建瓴, 一针见血, 虽然我只想知道3为什么能和2乘,又和1乘。 从来不说具
体数字, 真乃大师风范。
这个冯诺依曼是我前导师的导师的...导师。控制论的创始人,不知道是造导弹的还是
原子弹的。 德国人真不是盖的。

transformation
async

【在 h*i 的大作中提到】
: CPS is not a high level abstraction. It's a trick for program transformation
: , often used as an intermediate representation to implement something
: difficult without having to extend the base language.
: For example, in Clojure, people have used similar tricks to implement
: asynchronous primitives (like those in golang) as a library (e.g. core.async
: ), or to implement Bayesian probabilistic programming primitives (e.g.
: Anglican).
: These tricks are possible in Clojure because it is a Lisp, so you can use
: macros to implement them without having to extend the language itself.
: These things are not what I talk about regarding high level abstraction.

m******r
发帖数: 1033
18
还请楼上几位大师顺手把这个题目看一看?
http://www.mitbbs.com/article_t/Programming/31519957.html
这个题目,currying, 和阶乘题目是摘自同一本书同一章, thomas
里面的思想, haskell想出来的,是把多元函数f(x, y, z)变成复合函数
function(x) function(y) function(z) f(x,y,z)
思想是优美的,可我始终参不透R代码到底是怎么实现的。 我很怀疑和R里面do.call这
个函数某些性质有关。
祝大家狗年升官发财活出个人模狗样儿 !
g****t
发帖数: 31659
19
冯诺伊曼不是控制论的创始人。控制论的创始人是维诺。他有两本自传我在国内读过。
此人十几岁就拿phd了。字里行间对培养他的他老爹深恶痛绝。另外如果我没记错冯诺
伊曼是匈牙利人...


: 大师高屋建瓴, 一针见血, 虽然我只想知道3为什么能和2乘,又和1乘
。 从来
不说具

: 体数字, 真乃大师风范。

: 这个冯诺依曼是我前导师的导师的...导师。控制论的创始人,不知道是
造导弹
的还是

: 原子弹的。 德国人真不是盖的。

: transformation

: async



【在 m******r 的大作中提到】
: 还请楼上几位大师顺手把这个题目看一看?
: http://www.mitbbs.com/article_t/Programming/31519957.html
: 这个题目,currying, 和阶乘题目是摘自同一本书同一章, thomas
: 里面的思想, haskell想出来的,是把多元函数f(x, y, z)变成复合函数
: function(x) function(y) function(z) f(x,y,z)
: 思想是优美的,可我始终参不透R代码到底是怎么实现的。 我很怀疑和R里面do.call这
: 个函数某些性质有关。
: 祝大家狗年升官发财活出个人模狗样儿 !

g****t
发帖数: 31659
20
函数调用最后都是堆栈实现的。


: 还请楼上几位大师顺手把这个题目看一看?

: http://www.mitbbs.com/article_t/Programming/31519957.html

: 这个题目,currying, 和阶乘题目是摘自同一本书同一章, thomas 。

: 里面的思想, haskell想出来的,是把多元函数f(x, y, z)变成复合函数

: function(x) function(y) function(z) f(x,y,z)

: 思想是优美的,可我始终参不透R代码到底是怎么实现的。 我很怀疑和R
里面do.
call这

: 个函数某些性质有关。

: 祝大家狗年升官发财活出个人模狗样儿 !



【在 m******r 的大作中提到】
: 还请楼上几位大师顺手把这个题目看一看?
: http://www.mitbbs.com/article_t/Programming/31519957.html
: 这个题目,currying, 和阶乘题目是摘自同一本书同一章, thomas
: 里面的思想, haskell想出来的,是把多元函数f(x, y, z)变成复合函数
: function(x) function(y) function(z) f(x,y,z)
: 思想是优美的,可我始终参不透R代码到底是怎么实现的。 我很怀疑和R里面do.call这
: 个函数某些性质有关。
: 祝大家狗年升官发财活出个人模狗样儿 !

相关主题
Deepmind,蜘蛛坦克,小笼包(zz)DNN就是hype (转载)
DeepMind创始人自述:我们的算法可以横扫一切棋类博弈问几个神经网络的问题
请教一下,各位牛人觉得Rust语言怎么样?大部分人还认为阿法狗在背棋谱 (转载)
进入Programming版参与讨论
m******r
发帖数: 1033
21
是的,我其实犹豫了一下, 好像还攀不了冯诺依曼的高枝。
我老板的老板是这个
https://en.wikipedia.org/wiki/George_Zames
他的老板是这个
https://en.wikipedia.org/wiki/Norbert_Wiener
搞的领域是这个
https://en.wikipedia.org/wiki/H-infinity_methods_in_control_theory
我肯定不让我儿子学这个

【在 g****t 的大作中提到】
: 冯诺伊曼不是控制论的创始人。控制论的创始人是维诺。他有两本自传我在国内读过。
: 此人十几岁就拿phd了。字里行间对培养他的他老爹深恶痛绝。另外如果我没记错冯诺
: 伊曼是匈牙利人...
:
:
: 大师高屋建瓴, 一针见血, 虽然我只想知道3为什么能和2乘,又和1乘
: 。 从来
: 不说具
:
: 体数字, 真乃大师风范。
:
: 这个冯诺依曼是我前导师的导师的...导师。控制论的创始人,不知道是
: 造导弹

g****t
发帖数: 31659
22
Zames? 小增益定律 ?
哎,说起来都是泪。这东西连postdoc都找不着啊。谁碰谁死。
十几年前本站有个哥们和我聊过很多这方面东西,后来他回国做postdoc了。名校名师
,专业不好,又不想转码工.


: 是的,我其实犹豫了一下, 好像还攀不了冯诺依曼的高枝。

: 我老板的老板是这个

: https://en.wikipedia.org/wiki/George_Zames

: 他的老板是这个

: https://en.wikipedia.org/wiki/Norbert_Wiener

: 搞的领域是这个

: https://en.wikipedia.org/wiki/H-infinity_methods_in_control_
theory

: 我肯定不让我儿子学这个



【在 m******r 的大作中提到】
: 是的,我其实犹豫了一下, 好像还攀不了冯诺依曼的高枝。
: 我老板的老板是这个
: https://en.wikipedia.org/wiki/George_Zames
: 他的老板是这个
: https://en.wikipedia.org/wiki/Norbert_Wiener
: 搞的领域是这个
: https://en.wikipedia.org/wiki/H-infinity_methods_in_control_theory
: 我肯定不让我儿子学这个

g****t
发帖数: 31659
23
刚看了下,这哥们在清华当assoc professor了。看来苦尽甘来,有能力的人总能成功.
.....


: Zames? 小增益定律 ?

: 哎,说起来都是泪。这东西连postdoc都找不着啊。谁碰谁死。

: 十几年前本站有个哥们和我聊过很多这方面东西,后来他回国做postdoc了。名
校名师

: ,专业不好,又不想转码工.

:

【在 g****t 的大作中提到】
: Zames? 小增益定律 ?
: 哎,说起来都是泪。这东西连postdoc都找不着啊。谁碰谁死。
: 十几年前本站有个哥们和我聊过很多这方面东西,后来他回国做postdoc了。名校名师
: ,专业不好,又不想转码工.
:
:
: 是的,我其实犹豫了一下, 好像还攀不了冯诺依曼的高枝。
:
: 我老板的老板是这个
:
: https://en.wikipedia.org/wiki/George_Zames
:
: 他的老板是这个
:
: https://en.wikipedia.org/wiki/Norbert_Wiener

s********k
发帖数: 6180
24
应该是维纳,就是著名的维纳滤波创始人,火箭导弹这些大杀器的制导的基础解决理论
都源于此,直到遇到登月任务发现搞不定,于是kalman横空出世,当时NASA的人听了
kalman的思想惊为天人,靠着kalman的“抱着木盆划过大西洋”成功登月

【在 g****t 的大作中提到】
: 冯诺伊曼不是控制论的创始人。控制论的创始人是维诺。他有两本自传我在国内读过。
: 此人十几岁就拿phd了。字里行间对培养他的他老爹深恶痛绝。另外如果我没记错冯诺
: 伊曼是匈牙利人...
:
:
: 大师高屋建瓴, 一针见血, 虽然我只想知道3为什么能和2乘,又和1乘
: 。 从来
: 不说具
:
: 体数字, 真乃大师风范。
:
: 这个冯诺依曼是我前导师的导师的...导师。控制论的创始人,不知道是
: 造导弹

1 (共1页)
进入Programming版参与讨论
相关主题
问几个神经网络的问题word真他妈的坑爹
大部分人还认为阿法狗在背棋谱 (转载)我们来聊聊paradigms吧
关于搞ML刷数据的职业前途Java 不是纯oo, oo 不是 imperative programming
100伪币悬赏:CNN这个东西本质上处理不了形变写Python 的苦恼之一:有人当c用,有人当bash用,有人当FP用。当然也有人当python用
两道Java面试问题数组,结构,类在数值计算中哪个快
prototype和abstract factory的区别Python日报 2014-12-04: 7个测量Python脚本和控制内存以及CPU使用率的技巧 等
factory and abstract factory 的区别倡议使用 半空格 为分隔符 做为 中文的书写方式。
FPGA-based DNNsDeepmind,蜘蛛坦克,小笼包(zz)
相关话题的讨论汇总
话题: br话题: factorial话题: cp话题: function