随着微软推出vs2010,c#4.0,一个新的语言随之诞生——F#;大家绝大部分人应该在学校从C学习,到c++,到java或者c#.但在这个过程中其实我们的思维已经被束缚在如何编写计算机能识别能理解的代码,比如我们必须得考虑给存储空间时而分配变量a时而分配变量b,渐渐的我们淡忘了解决问题的核心逻辑应该是人的思维方式,渐渐的我们习惯于被计算机思维所奴役,渐渐的我们发现编写代码牛b的人是对计算机结构最了解的人......;随着函数式编程在人工智能领域的发展;从Lisp,haskell...到F#,函数式编程语言语言走过的路曲折而漫长。
下面举个简单的例子(快速排序)说明函数是语言如何按照人的逻辑编写(用haskell语言举例,该语言和F#很相似),对照传统c语言的写法做简单的说明:
qsort [] = []
qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs)[edit]
上面这段程序你不用了解haskell语言你也可以明白,第二句是排序的核心,把小于x的排在输出的最前面,x排在中间,大于等于x的排在输出列表的最后。
void qsort(int a[], int lo, int hi) {
{
int h, l, p, t; if (lo < hi) {
l = lo;
h = hi;
p = a[hi]; do {
while ((l < h) && (a[l] <= p))
l = l+1;
while ((h > l) && (a[h] >= p))
h = h-1;
if (l < h) {
t = a[l];
a[l] = a[h];
a[h] = t;
}
} while (l < h); t = a[l];
a[l] = a[hi];
a[hi] = t; qsort( a, lo, l-1 );
qsort( a, l+1, hi );
}
}
这是一段c语言的快速排序,很明显必须得考虑所用的临时变量何时应该赋上何值,这些原本归计算机考虑的事情。 上面的例子可以看出函数式编程和命令式编程的本质,这里我不是要讨论效率(第一种也许没有第二种快),程序语言做为一种生产工本身就是来加快生产力的发展,如果按照人的思维逻辑编程能够应用到广泛的社会生产中,必然将会取代以计算机的思维模式编程。
F#的推出,微软也有让.net开发者用F#编写核心代码,c#/vb继续完成页面层工作的活。 微软是个孜孜不倦的巨人,从c#1.0到c#3.0的linq,c#娱乐结构化语言第四代语言的特性;从c#1.0到c#3.0,c#4.0,c#又多了动态语言的特性;从c#1.0到F#,一个质变的开始,函数式语言通过广大民众喜闻乐见的vs平台上总算能见到函数式语言了。
(纯属个人见解,欢迎拍砖)
下面举个简单的例子(快速排序)说明函数是语言如何按照人的逻辑编写(用haskell语言举例,该语言和F#很相似),对照传统c语言的写法做简单的说明:
qsort [] = []
qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs)[edit]
上面这段程序你不用了解haskell语言你也可以明白,第二句是排序的核心,把小于x的排在输出的最前面,x排在中间,大于等于x的排在输出列表的最后。
void qsort(int a[], int lo, int hi) {
{
int h, l, p, t; if (lo < hi) {
l = lo;
h = hi;
p = a[hi]; do {
while ((l < h) && (a[l] <= p))
l = l+1;
while ((h > l) && (a[h] >= p))
h = h-1;
if (l < h) {
t = a[l];
a[l] = a[h];
a[h] = t;
}
} while (l < h); t = a[l];
a[l] = a[hi];
a[hi] = t; qsort( a, lo, l-1 );
qsort( a, l+1, hi );
}
}
这是一段c语言的快速排序,很明显必须得考虑所用的临时变量何时应该赋上何值,这些原本归计算机考虑的事情。 上面的例子可以看出函数式编程和命令式编程的本质,这里我不是要讨论效率(第一种也许没有第二种快),程序语言做为一种生产工本身就是来加快生产力的发展,如果按照人的思维逻辑编程能够应用到广泛的社会生产中,必然将会取代以计算机的思维模式编程。
F#的推出,微软也有让.net开发者用F#编写核心代码,c#/vb继续完成页面层工作的活。 微软是个孜孜不倦的巨人,从c#1.0到c#3.0的linq,c#娱乐结构化语言第四代语言的特性;从c#1.0到c#3.0,c#4.0,c#又多了动态语言的特性;从c#1.0到F#,一个质变的开始,函数式语言通过广大民众喜闻乐见的vs平台上总算能见到函数式语言了。
(纯属个人见解,欢迎拍砖)
qsort [] = []
qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs)[edit]我回家卖白菜去.
qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs)[edit]
倒塌,看了半天都看不懂
4.0里还有
DLR (Dynamic Language Runtime)
C# and VB .NET
Web and Networking
Basic class libraries(BCL)等技术
.NET Framework 4.0中PLINQ就不错
{
if (table.Count == 0)
return table;
else
{
List<T> left, right;
var s = table[0]; //选择第一个元素为划分元素
Partition(table, s, out left, out right); //用划分元素分成左右两个表
left.Add(s); //把s加入左表的最后
left.AddRange(right); //把right加入左表的最后
return left;
}
}使用Partition方法将输入的表划分为左右两个表,左表的元素不大于划分元素,右表的元素不小于划分元素。我向来并不是追求少写几行代码而故意写成天书,只要你熟练一种编程思路就好。所以这个方面,haskell和c我看不出有什么不同。
F#最多只是简化下需要你写的代码量而已,但最终执行必然一致或者相近。
其实NI的labview做得不错,是图形化设计的,用户只关心数据流和处理方法,具体的实现由labview来负责。
不过NI的硬件太贵,很多和硬件捆绑,限制了应用。
个人认为,将来编程的发展趋势不应该是停留在语言上,而应该是向图形化设计发展。
{
if (table.Count == 0)
return table;
else
{
List<T> left, right;
var s = table[0];
Partition(table, s, out left, out right); //首先划分
var res = qsort(left); //左递归
res.Add(s);
res.AddRange(qsort(right)); //右递归
return res;
}
}
3.5都有200多M- =~~~还是2.0好,20M哈哈
fib = 1 : 1 : zipWith (+) fib (tail fib)
第一个是1,第二个是1,之后的就是前面2个相加,和数学上的定义如出一辙
http://channel9.msdn.com/pdc2008/TL16/[1]Meta-Programming Capabilities
meta-programming是指:
写一段“程序”,让机器执行之以生成一段“程序”,让机器执行之。
前一个“程序”称为 meta-program,
后一个“程序”称为 program。[2]Compiler As Service
用托管代码重写编译器(原来是用C++编写的,使用IMetaDataEmit接口输出PE文件),
支持其他人编写代码参与整个编译过程(估计类似Plugin)或者调用编译过程(类似已有的动态语言的eval功能)。class Test
{
static void Main(string[] args)
{
CSharpEvaluator ev = new CSharpEvaluator();
ev.Eval(@"for (int i = 0; i < 10; i++) { System.Console.WriteLine('hello CSharp 5.0!'); }");
}
}
C#风头比不上
[1]F#
[2]Fan
[3]Scala可以考虑转型~~
不就是C#中镶嵌的Linq吗
同样C#也是我最好的语言. 我用c#几乎能开发所有的应用程序.
操作系统平台除外,除非微软想让你开发.我相信C#一样开发操作系统.
现在函数式编程还是太深太难。
你以后多去函数式编程版活动吧,那里实在太冷清了。我函数式编程水平不成(一定程度上是因为英文水平不好),在那个版也就是个看客。
年初接触了一下 GIMP 的 script,已经搞得相当昏了……