写了多年程序,突然想知道为什么函数可以连着用啊

2018-09-12 11:56:54 +08:00
 pinews
就是 a(b(c()))这样,虽然经常这样用,总觉得怪怪的,不知道在哪里是否有专门的说明?
15419 次点击
所在节点    PHP
148 条回复
DOLLOR
2018-09-13 09:46:57 +08:00
看了附言,明白了,楼主是完全不懂得“返回值”这种东西。
aa514758835
2018-09-13 09:56:46 +08:00
函数的返回值作为函数参数,就等于是链式编程
ys0290
2018-09-13 09:57:59 +08:00
还可以 a(a(a(a())))
gamecreating
2018-09-13 10:03:41 +08:00
多年程序 ......你看样子还没入门...
没学过 C 吧?
luofan004
2018-09-13 10:09:21 +08:00
感觉楼主开始怀疑人生了。。
yufpga
2018-09-13 10:22:16 +08:00
推荐两本书:《深入理解计算机系统》,《深入理解程序设计:使用 Linux 汇编语言》。啃这些东西都需要花些时间,多的不说,免得被楼上那些个“大佬”嘲笑。
cyspy
2018-09-13 10:33:35 +08:00
这个帖子下面扯各种高级特性的大佬们估计现在都想抽自己的脸。这段代码简单到,无非就是 c 的返回值传给 b 而已
bumz
2018-09-13 10:41:10 +08:00
@FrankHB #104 数学确实不计较 applicative order 和 normal order 什么的,毕竟数学诞生比 PL 早几千年,函数的诞生也比 PL 早几百年

然而题主问为什么可以这样用,不得不说,f(g(h(x))) 这种写法还是来自数学,而数学中它的合理性则来自等式的基本性质
persimmon
2018-09-13 10:42:54 +08:00
@FrankHB 只不过是在拿参数的位置调用了别的函数(新的过程调用),这里压根就不是个 tail position ;再说我觉你不过是在表达一个主观的 syntax 喜好的问题,为什么要上升到 semantic 层面呢?
zsdroid
2018-09-13 10:44:20 +08:00
> 这些基础知识不知道在哪里学
我来告诉你,这些基础知识从小学里学,知识点是,四则运算。
`2*(1+2)`,2 不是与`(`相乘,而是与`(1+2)`的返回值相乘。
zagreb
2018-09-13 10:46:18 +08:00
@FrankHB #104 多谢指正
bumz
2018-09-13 10:47:44 +08:00
提栈的,applicative order 和栈还真的没什么关系

栈不过是实现 applicative order 的其中一种辅助工具而已,在 concurrency 环境中一样可以 applicative order,但是栈就用不了了
wizardforcel
2018-09-13 10:49:21 +08:00
因为词法是可以递归定义的啊,func(...) 接受表达式(的逗号分隔列表),它自己也算作表达式。
persimmon
2018-09-13 10:51:21 +08:00
@FrankHB (前面那一条回复有误,请忽略)不过是在拿参数的位置调用了别的函数(新的过程调用),这里压根就不是个 tail position ;再说我觉得楼主不过是在表达一个主观的 syntax 喜好的问题,但上升到 semantic 层面明显没必要
zagreb
2018-09-13 10:54:06 +08:00
php 文档 Expressions 章节写到“ Slightly more complex examples for expressions are functions.”和“ Functions are expressions with the value of their return value.”
Function arguments 章节写到“ Information may be passed to functions via the argument list, which is a comma-delimited list of expressions.”
所以我的理解是 函数调用表达式可以作为函数的参数,用以解答楼主的问题
Mutoo
2018-09-13 11:08:26 +08:00
语法树和表达式求值,LZ 需要补一下编译原理。
bigeast
2018-09-13 11:11:27 +08:00
@deljuven 看你一本正经地引用 Wikipedia,你自己都没看吧。看了的话就知道楼主说的跟柯里化一点关系都没有。

45,53,70,78,92,同意。

v2 的水平真低。
ywlvs
2018-09-13 11:30:56 +08:00
我一直遵循着老师的教诲:有括号,先算括号里的
lancelock
2018-09-13 11:39:47 +08:00
看来我是太高估 v2 的水平了,就一个最基本的返回值都能扯上什么函数式编程。夸夸其谈,不知所云
Roooooys
2018-09-13 11:47:13 +08:00
@lancelock 哈哈

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/488475

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX