当前在线人数14192
首页 - 分类讨论区 - 电脑网络 - 葵花宝典版 - 同主题阅读文章

此篇文章共收到打赏
0

  • 10
  • 20
  • 50
  • 100
您目前伪币余额:0
未名交友
[更多]
[更多]
functional programming的两个方面
[版面:葵花宝典][首篇作者:TheMatrix] , 2018年01月02日23:52:01 ,1279次阅读,24次回复
来APP回复,赚取更多伪币 关注本站公众号:
[首页] [上页][下页][末页] [分页:1 2 ]
TheMatrix
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 1 ]

发信人: TheMatrix (TheMatrix), 信区: Programming
标  题: functional programming的两个方面
发信站: BBS 未名空间站 (Tue Jan  2 23:52:01 2018, 美东)

stack overflow 上的这个解说挺好。

https://stackoverflow.com/questions/24279/functional-programming-and-non-
functional-programming

There are two different definitions of "functional programming" in common
use today:

The older definition (originating from Lisp) is that functional programming
is about programming using first-class functions, i.e. where functions are
treated like any other value so you can pass functions as arguments to other
functions and function can return functions among their return values. This
culminates in the use of higher-order functions such as map and reduce (you
may have heard of mapReduce as a single operation used heavily by Google
and, unsurprisingly, it is a close relative!). The .NET types System.Func
and System.Action make higher-order functions available in C#. Although
currying is impractical in C#, functions that accept other functions as
arguments are common, e.g. the Parallel.For function.

The younger definition (popularized by Haskell) is that functional
programming is also about minimizing and controlling side effects including
mutation, i.e. writing programs that solve problems by composing expressions
. This is more commonly called "purely functional programming". This is made
possible by wildly different approaches to data structures called "purely
functional data structures". One problem is that translating traditional
imperative algorithms to use purely functional data structures typically
makes performance 10x worse. Haskell is the only surviving purely functional
programming language but the concepts have crept into mainstream
programming with libraries like Linq on .NET.



--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 50.]

 
TheMatrix
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 2 ]

发信人: TheMatrix (TheMatrix), 信区: Programming
标  题: Re: functional programming的两个方面
发信站: BBS 未名空间站 (Tue Jan  2 23:59:37 2018, 美东)

functional programming我一直有一个困惑就是:它是不是没有复杂结构类型?比如
OOP中经常定义的类或结构?functional programming好像只能由简单类型然后用list,
dictionary, set等通用结构聚合起来?我觉得这个和OOP中定义的类或结构还是有区
别的。这种聚合的方式好像是一种无类型声明的数据结构。理论上说这样就足够了吗?

【 在 TheMatrix (TheMatrix) 的大作中提到: 】
: stack overflow 上的这个解说挺好。
: https://stackoverflow.com/questions/24279/functional-programming-and-non-
: functional-programming
: There are two different definitions of "functional programming" in common
: use today:
: The older definition (originating from Lisp) is that functional
programming
: is about programming using first-class functions, i.e. where functions are
: treated like any other value so you can pass functions as arguments to
other
:  functions and function can return functions among their return values.
This
:  culminates in the use of higher-order functions such as map and reduce (
you
: ...................



--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 50.]

 
echowuhao
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 3 ]

发信人: echowuhao (echo), 信区: Programming
标  题: Re: functional programming的两个方面
发信站: BBS 未名空间站 (Wed Jan  3 00:25:28 2018, 美东)

fp 里对应 record, 跟c里的struct 类似。

https://realworldocaml.org/v1/en/html/records.html

【 在 TheMatrix (TheMatrix) 的大作中提到: 】
: functional programming我一直有一个困惑就是:它是不是没有复杂结构类型?比如
: OOP中经常定义的类或结构?functional programming好像只能由简单类型然后用
list,
:  dictionary, set等通用结构聚合起来?我觉得这个和OOP中定义的类或结构还是有区
: 别的。这种聚合的方式好像是一种无类型声明的数据结构。理论上说这样就足够了吗?
: programming
: other
: This
: you



--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 2602:306:83da:1]

 
nowhere7
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 4 ]

发信人: nowhere7 (折腾), 信区: Programming
标  题: Re: functional programming的两个方面
发信站: BBS 未名空间站 (Wed Jan  3 01:07:38 2018, 美东)

说的有那么点意思,但是还是有点混
比如LINQ既是他说的老的定义的higher order function, 也是他提到的pure
function
LINQ的select就是map, aggregate就是reduce

我觉得老定义的东西比较实用,性能损失少(if any), 也是现在主流语言加入fp
feature的主要内容,跟传统编程概念结合的也比较自然

新定义的强调immutability的fp需要洗脑,性能上也不乐观,我个人不看好

--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 66.]

 
TheMatrix
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 5 ]

发信人: TheMatrix (TheMatrix), 信区: Programming
标  题: Re: functional programming的两个方面
发信站: BBS 未名空间站 (Wed Jan  3 08:03:09 2018, 美东)

哦。那就是跟OOP差不多。也对,clojure里没有,因为它是动态语言,而kotlin和
scala又是OOP和fp双编程方式的。

【 在 echowuhao (echo) 的大作中提到: 】
: fp 里对应 record, 跟c里的struct 类似。
: https://realworldocaml.org/v1/en/html/records.html
: list,



--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 50.]

 
nchip
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 6 ]

发信人: nchip (脑残芯), 信区: Programming
标  题: Re: functional programming的两个方面
发信站: BBS 未名空间站 (Wed Jan  3 08:10:17 2018, 美东)

我来试着帮你解困惑一下。

http://www.quora.com/Why-is-it-better-to-have-100-functions-operate-on-one-data-structure-than-10-functions-on-10-data-structures-on-Clojure

http://stackoverflow.com/questions/6016271/why-is-it-better-to-have-100-functions-operate-on-one-data-structure-than-10-fun

原话是大牛Alan Perils说的

http://en.wikipedia.org/wiki/Alan_Perlis

这个也可以解释为什么Json,xml比较流行


【 在 TheMatrix (TheMatrix) 的大作中提到: 】
: functional programming我一直有一个困惑就是:它是不是没有复杂结构类型?比如
: OOP中经常定义的类或结构?functional programming好像只能由简单类型然后用
list,
:  dictionary, set等通用结构聚合起来?我觉得这个和OOP中定义的类或结构还是有区
: 别的。这种聚合的方式好像是一种无类型声明的数据结构。理论上说这样就足够了吗?
: programming
: other
: This
: you






--
※ 修改:·nchip 於 Jan  3 08:19:22 2018 修改本文·[FROM: 162.]
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 162.]

 
TheMatrix
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 7 ]

发信人: TheMatrix (TheMatrix), 信区: Programming
标  题: Re: functional programming的两个方面
发信站: BBS 未名空间站 (Wed Jan  3 10:50:20 2018, 美东)

也就是说functional programming鼓励使用简单类型加通用collection结构作为数据结
构,而不鼓励自定义结构类型。我听说计算机理论中用类型推演就能解决好多问题,那
这种简单类型加collection的方式就做不到了吧?不过类型推演这个我也道听途说,具
体指什么我也不知道。

【在  nchip(脑残芯)的大作中提到:】
:我来试着帮你解困惑一下。


--
※ 来源:·Android 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 2607:fb90:2b9f:]

 
echowuhao
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 8 ]

发信人: echowuhao (echo), 信区: Programming
标  题: Re: functional programming的两个方面
发信站: BBS 未名空间站 (Wed Jan  3 11:34:13 2018, 美东)

clojure lisp scheme 这类dynamic type类型系统太弱。 强类型的语言基本
上到处是type,定义个type 比写个fun 还简单,你听说的是这种。


【 在 TheMatrix (TheMatrix) 的大作中提到: 】
: 也就是说functional programming鼓励使用简单类型加通用collection结构作为数据结
: 构,而不鼓励自定义结构类型。我听说计算机理论中用类型推演就能解决好多问题,那
: 这种简单类型加collection的方式就做不到了吧?不过类型推演这个我也道听途说,具
: 体指什么我也不知道。
: :我来试着帮你解困惑一下。
: :




--
※ 修改:·echowuhao 於 Jan  3 11:35:15 2018 修改本文·[FROM: 98.]
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 98.]

 
guvest
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 9 ]

发信人: guvest (我爱你老婆Anna), 信区: Programming
标  题: functional programming的两个方面
发信站: BBS 未名空间站 (Wed Jan  3 13:50:56 2018, 美东)

Lisp 无类型
ML 有类型

就好比python vs C吧。不用想的太复杂。

数学论文中,
x,y都是one time assignmen。一般会说清楚是整数还是
实数,函数等等。你总结下数学论文的写作方法就明白了。

物理学论文通常不是那么严格。

--
※ 来源:· 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 192.]

 
dracodoc
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 10 ]

发信人: dracodoc (david), 信区: Programming
标  题: Re: functional programming的两个方面
发信站: BBS 未名空间站 (Wed Jan  3 13:53:47 2018, 美东)

OO的类型是封装为主,你要重用得通过继承或者接口,比较繁琐,boilerplate太多。
FP的粒度更细,从不同角度抽象,把复杂的过程拆成很多组件,每个组件只要求某些性
质,很多常用函数能用在各种数据结构上,而你的类型也可以直接用这些函数。

immutable, no side effect保证函数可以组合的正确性。


【 在 TheMatrix (TheMatrix) 的大作中提到: 】
: 也就是说functional programming鼓励使用简单类型加通用collection结构作为数据结
: 构,而不鼓励自定义结构类型。我听说计算机理论中用类型推演就能解决好多问题,那
: 这种简单类型加collection的方式就做不到了吧?不过类型推演这个我也道听途说,具
: 体指什么我也不知道。
: :我来试着帮你解困惑一下。
: :



--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 129.]

 
dracodoc
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 11 ]

发信人: dracodoc (david), 信区: Programming
标  题: Re: functional programming的两个方面
发信站: BBS 未名空间站 (Wed Jan  3 13:55:09 2018, 美东)

我之前提过functional thinking这本书,讲的比较清楚

https://www.mitbbs.com/article_t/Programming/31509139.html

--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 129.]

 
nchip
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 12 ]

发信人: nchip (脑残芯), 信区: Programming
标  题: Re: functional programming的两个方面
发信站: BBS 未名空间站 (Wed Jan  3 15:09:38 2018, 美东)

是Alan Perlis鼓励使用简单类型,越是pure的fp语言越符合Alan的观点。

事实上所谓OOP的三大feature,两个没什么价值
1. encapsulation - useless for Clojure,因为data is immutable, 不需要
encapsulate

2. inheritance - 如果同意Alan Perlis的观点,inheritance也没有什么value,
inheritance更倾向于type system,produce more complicated data structure. 而
Alan Perlis prefer simple data structure.

3. polymorphism - 这个是唯一有用的,OOP语言一般要借用inheritance来实现,而
Clojure 通过multimethod就能实现runtime polymorphism,不需要inheritance.



【 在 TheMatrix (TheMatrix) 的大作中提到: 】
: 也就是说functional programming鼓励使用简单类型加通用collection结构作为数据结
: 构,而不鼓励自定义结构类型。我听说计算机理论中用类型推演就能解决好多问题,那
: 这种简单类型加collection的方式就做不到了吧?不过类型推演这个我也道听途说,具
: 体指什么我也不知道。
: :我来试着帮你解困惑一下。
: :



--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 93.]

 
nacst23
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 13 ]

发信人: nacst23 (cnc), 信区: Programming
标  题: Re: functional programming的两个方面
发信站: BBS 未名空间站 (Wed Jan  3 16:06:54 2018, 美东)


【 在 nchip (脑残芯) 的大作中提到: 】
: 是Alan Perlis鼓励使用简单类型,越是pure的fp语言越符合Alan的观点。
: 事实上所谓OOP的三大feature,两个没什么价值
: 1. encapsulation - useless for Clojure,因为data is immutable, 不需要
: encapsulate
: 2. inheritance - 如果同意Alan Perlis的观点,inheritance也没有什么value,
: inheritance更倾向于type system,produce more complicated data structure. 而
: Alan Perlis prefer simple data structure.
: 3. polymorphism - 这个是唯一有用的,OOP语言一般要借用inheritance来实现,而
: Clojure 通过multimethod就能实现runtime polymorphism,不需要inheritance.

c++ has polymorphism , not by inherirance.



--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 69.]

 
nacst23
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 14 ]

发信人: nacst23 (cnc), 信区: Programming
标  题: Re: functional programming的两个方面
发信站: BBS 未名空间站 (Wed Jan  3 16:08:30 2018, 美东)

clojure does have record. but most ppl like map(the data structure), map
this , then map that.....

https://clojure.org/reference/datatypes

【 在 TheMatrix (TheMatrix) 的大作中提到: 】
: 哦。那就是跟OOP差不多。也对,clojure里没有,因为它是动态语言,而kotlin和
: scala又是OOP和fp双编程方式的。



--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 69.]

 
dimorphism
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 15 ]

发信人: dimorphism (雷小阿伦), 信区: Programming
标  题: Re: functional programming的两个方面
发信站: BBS 未名空间站 (Wed Jan  3 17:59:34 2018, 美东)

是本好书

【 在 dracodoc (david) 的大作中提到: 】
: 我之前提过functional thinking这本书,讲的比较清楚
: https://www.mitbbs.com/article_t/Programming/31509139.html



--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 209.]

 
nchip
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 16 ]

发信人: nchip (脑残芯), 信区: Programming
标  题: Re: functional programming的两个方面
发信站: BBS 未名空间站 (Wed Jan  3 18:05:06 2018, 美东)

没有inheritance tree, C++怎么搞polymorphism?

【 在 nacst23 (cnc) 的大作中提到: 】
: c++ has polymorphism , not by inherirance.



--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 185.]

 
lingoffer
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 17 ]

发信人: lingoffer (领Offer), 信区: Programming
标  题: Re: functional programming的两个方面
发信站: BBS 未名空间站 (Wed Jan  3 21:36:43 2018, 美东)

那人估计想说
另外function/operator overloading和template什么的应该也算是多态吧

【 在 nchip (脑残芯) 的大作中提到: 】
: 没有inheritance tree, C++怎么搞polymorphism?




--
☆ 发自 iPhone 买买提 1.24.04
--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 2601:646:8780:6]

 
Nisayer
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 18 ]

发信人: Nisayer (si fata sinata), 信区: Programming
标  题: Re: functional programming的两个方面
发信站: BBS 未名空间站 (Thu Jan  4 13:49:18 2018, 美东)



....

建议想了解functional programming 去读一下 sicp

复杂数据结构根本不是啥事 用 scheme不需要多少行就可以让scheme支持oo

我发觉这个版很多人对 fp的了解不如好大学的大二学生

【 在 TheMatrix (TheMatrix) 的大作中提到: 】
: functional programming我一直有一个困惑就是:它是不是没有复杂结构类型?比如
: OOP中经常定义的类或结构?functional programming好像只能由简单类型然后用
list,
:  dictionary, set等通用结构聚合起来?我觉得这个和OOP中定义的类或结构还是有区
: 别的。这种聚合的方式好像是一种无类型声明的数据结构。理论上说这样就足够了吗?
: programming
: other
: This
: you


--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 45.]

 
xiaoju
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 19 ]

发信人: xiaoju (可爱的龙猫), 信区: Programming
标  题: Re: functional programming的两个方面
发信站: BBS 未名空间站 (Thu Jan  4 17:55:58 2018, 美东)

动静态和fp是不同范畴啊

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: Lisp 无类型
: ML 有类型
: 就好比python vs C吧。不用想的太复杂。
: 数学论文中,
: x,y都是one time assignmen。一般会说清楚是整数还是
: 实数,函数等等。你总结下数学论文的写作方法就明白了。
: 物理学论文通常不是那么严格。



--

※ 来源:·BBS 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 27.]

 
StarVenus
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 20 ]

发信人: StarVenus (参商*极品磨工~人不知而不愠), 信区: Programming
标  题: Re: functional programming的两个方面
发信站: BBS 未名空间站 (Sat Jan  6 18:07:06 2018, 美东)

template specialization

【 在 nchip (脑残芯) 的大作中提到: 】
: 没有inheritance tree, C++怎么搞polymorphism?



--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 72.]

[首页] [上页][下页][末页] [分页:1 2 ]
[快速返回] [ 进入葵花宝典讨论区] [返回顶部]
回复文章
标题:
内 容:

未名交友
将您的链接放在这儿

友情链接


 

Site Map - Contact Us - Terms and Conditions - Privacy Policy

版权所有,未名空间(mitbbs.com),since 1996