免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: izhier
打印 上一主题 下一主题

关于标量和向量 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-25 19:06 |显示全部楼层 |倒序浏览
在编程语言中,标量和向量这两个概念在funtional语言中很容易体现

变量为标量,而函数为向量(类型由data (->)定义的)

问一下:

在imperative语言中这种理解同样适用吗?(变量为标量,而函数为向量?)

以下是我以前发的帖子的回答:

http://bbs.chinaunix.net/viewthread.php?tid=1289582

[ 本帖最后由 izhier 于 2009-4-26 14:31 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-04-25 22:14 |显示全部楼层

回复 #2 MMMIX 的帖子

在这个帖子:
http://bbs2.chinaunix.net/thread-1415220-1-1.html
二楼下面

  1. 从抽象的效果来说,他们是同样的。但是从语法上实在是太累赘,Combinator本身抽象的就是算法或者说是业务逻辑,而承载逻辑的最基本单元函数却不是第一等的公民,只能负载在类上进行传递。从OO来说的确不善于抽象逻辑和算法。以前 STL之父说过,不是所有的东西都是对象,算法就不是对象。STL中的用functor抽象算法和FP有些像,但是还只是东施效颦罢了。FP并不长于运算,而是长于逻辑的推导。这种推导,在数学上称为算子空间,什么是算子和算子空间呢?我们数学中知道,f(x),x有定义域 f(x)有值域。而我们把x 的定义域的概念进行扩展,我们把每个函数看成一个集合中的元素。然后将所有算子的集合为抽象空间或者函数空间(也就是说值域这个集合中的每个元素都是一个函数).例如上面的各种各样的term和next就是一系列的算子,他们的集合就叫做抽象空间。一个算子可以看作这个空间里面的一个点,算子的组合即可以看作函数空间中的向量组合。在数学里我们空间的两个点表示a: [x1,y1,z1],b:[x2,y2,z2],他们的组合就成为一个线段,如果有这个线段产生方向就成为一个a->b的向量。因为算子和算子之间也是有方向的,最简单就是运算顺序。那么算子和算子之间就是算子向量。由于算子所作用的集合并没有维数的限制,在函数空间基础上所研究出来算子的各种性质,成为处理用有穷维或者线性空间逼近无穷维集合问题的有力武器。因此我们可以看到其实算子空间本身具有的性质就是N维正交。也就是说每个算子都是独立互不干扰的。他不会有OO那样牵扯不清的各种问题。所以我经常说FP的研究的就是算法的算法。这只是一个简单的实现。Combinator 可以做很多你都想不到的事情,例如最著名的Y Combinator和不动点。这个东西可以说是FP中最精彩的一笔,限于篇幅以及鉴于它让人抓狂的程度我是不准备介绍他们了。
复制代码

我看到上面的一段话,认为Haskell中的函数像一个向量
难道是我理解有误 ?

[ 本帖最后由 izhier 于 2009-4-25 22:15 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2009-04-25 22:45 |显示全部楼层
迷惑了,我想确定一下:
Haskell 中的函数是向量吗 ?

那编程语言中的标量和向量是如何定义的呢 ?

论坛徽章:
0
4 [报告]
发表于 2009-04-25 22:51 |显示全部楼层
原帖由 MMMIX 于 2009-4-25 22:22 发表
嗯。老实说,这些东西对最开始学习 functional programming 并没有什么帮助,还可能导致你使用/误用一些术语,把你自己转晕。。。

现在已经晕了

论坛徽章:
0
5 [报告]
发表于 2009-04-26 10:35 |显示全部楼层
数学中,把
只有大小但没有方向的量叫做数量(或纯量),物理中常称为标量。
既有大小又有方向的量叫做向量(亦称矢量)。

但不知编程语言中是不是这样定义的?

论坛徽章:
0
6 [报告]
发表于 2009-04-26 10:39 |显示全部楼层
Haskell 中的函数是 first class 的,那函数是有值的
函数接受一个参数经过计算返回我们想要的结果

   f(x)
x----->y

难道 f 这不是 x -> y 的向量 ?

[ 本帖最后由 izhier 于 2009-4-26 10:49 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2009-04-26 11:33 |显示全部楼层

回复 #11 MMMIX 的帖子

加法:
f + g
   f(x)    g(y)
x---->y----->z
=>
f + g = g.f

数乘:
f+f+f+...
    f(x)      f(x)      f(x)
x1---->x2---->x3----->.....
=>
n * f = head.drop n.itetate f

向量之间的乘法,知识所限还没想到

[ 本帖最后由 izhier 于 2009-4-26 14:55 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2009-04-26 14:38 |显示全部楼层
原帖由 flw 于 2009-4-26 14:12 发表
啥叫“方向”啊?

初始条件为起点,返回结果为终点
初始条件---->返回结果 为函数的方向

论坛徽章:
0
9 [报告]
发表于 2009-04-26 14:42 |显示全部楼层
原帖由 drunkedcat 于 2009-4-26 13:10 发表
楼主应该看看范畴论。

以前在图书馆借了一本,看不懂
想问一下,看范畴论需要哪些基础知识(数学水平仅为高中水平)?

[ 本帖最后由 izhier 于 2009-4-26 14:57 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2009-04-27 09:38 |显示全部楼层
看来上面我说的全是 强词夺理和自以为是!

还需要努力学习呀!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP