forcal
发表于 2010-8-10 10:49:32
以下八皇后问题,测试的是函数递归调用的速度,一直想看看lua的速度,但不会写代码,谁能帮忙写一个?// 在运行不同的程序时,Forcal的速度,从接近C++到只有C++速度的几十分之一。
// Forcal的建议是:对运行时间较长的程序,如确有必要,设计成二级函数由Forcal调用,从而获得接近C++速度的性能。
// Forcal与C++是无缝链接的。故C++能实现的功能,借助二级函数,Forcal完全可以实现。
// 但没有Forcal支持的C++程序,将无法获得高效率地实时编译计算字符串表达式的功能。
// 据测定,以下八皇后问题,Forcal的运行速度约为C++的1/10。
// 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。
// 该问题是19世纪著名的数学家高斯1850年提出:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
// 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。
// 以下算法是从网上搜来的,该算法没有最终给出排列组合,仅仅给出有多少种组合,但是算法确实十分奥妙。
//Forcal源程序
i:(::sum,upperlim)= sum=0,upperlim=1,SetIntStackMax(1000);
i:test(row, ld, rd : pos,p : sum,upperlim)=
{
which { row != upperlim,
{ pos = and{upperlim , not},
while{ pos,
p = and(pos,-pos),
pos = pos -p,
test(row+p, shl(ld+p,1), shr(rd+p,1))
}
},
sum++
}
};
i:main(:tm,n:sum,upperlim)=
{
n=15,
tm=sys::clock(),
printff{"\r\nQueens:{1,i} , ",n},
upperlim=shl(upperlim,n)-1,
test(0,0,0),
printff{"sum:{1,i} , {2,i} millisecond.\r\n",sum,sys::clock()-tm}
};
//完成相同功能的C++程序
/*
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
long sum=0,upperlim=1;
void test(long row, long ld, long rd){
if (row != upperlim){
long pos = upperlim & ~(row | ld | rd);
while (pos){
long p = pos& -pos;
pos -= p;
test(row+p, (ld+p)<<1, (rd+p)>>1);
}
}
else
sum++;
}
int main(int argc, char *argv[])
{
time_t tm;
int n=15;
if(argc!=1)n=atoi(argv);
tm=time(0);
if((n<1)||(n>32))
{
printf(" heh..I can’t calculate that.\n");
exit(-1);
}
printf("%d Queens\n",n);
upperlim=(upperlim<<n)-1;
test(0,0,0);
printf("Number of solutions is %ld, %d seconds\n", sum,(int)(time(0)-tm));
}
*/
wayne
发表于 2010-8-10 11:59:45
20# forcal
你说过“不使用MSVC运行库的静态库版本”, 是说forcal可以有linux版本吗?
lua可以与wxwidgets胶合的,叫wxlua,编写界面特别简洁,跟Tcl/Tk一样。
mathe
发表于 2010-8-10 12:02:31
个人以为,让别人接受一种新语言是非常困难的,除非说它有非常非常多非常非常强大的功能。
wayne
发表于 2010-8-10 12:20:24
mathe掷话 一针见血,
现在的编程语言实在是太多太多了,
新的编程语言如果没有显著的招牌特点,是很难发展下去的。
无心人
发表于 2010-8-10 12:48:50
可以支持函数式编程
不过编译解释器难度很大
forcal
发表于 2010-8-10 14:42:48
20# forcal
你说过“不使用MSVC运行库的静态库版本”, 是说forcal可以有linux版本吗?
lua可以与wxwidgets胶合的,叫wxlua,编写界面特别简洁,跟Tcl/Tk一样。
wayne 发表于 2010-8-10 11:59 http://bbs.emath.ac.cn/images/common/back.gif
Forcal是用C/C++设计的,里面没有用C++复杂的高级特征,也没有使用汇编,因此有很强的移植性。如果在windows下能获得认可,再发展linux版本。
Forcal现在没有与其他任何东西胶合,如界面库、数据库等等。
但Forcal是一个dll,可以被任何可加载dll的程序使用。从计算简单的数学表达式到构建复杂的系统,Forcal都可以提供支持。所有的Forcal扩展库都是根据核心库Forcal32w.dll的输出函数设计的。
forcal
发表于 2010-8-10 14:51:16
个人以为,让别人接受一种新语言是非常困难的,除非说它有非常非常多非常非常强大的功能。
mathe 发表于 2010-8-10 12:02 http://bbs.emath.ac.cn/images/common/back.gif
非常赞同这个观点,呵呵。
在某些方面,Mathematica 和Maple 提供了比matlab更好的实现和功能,但一般人遇到要解决的问题,多数还是选matlab,尽管Mathematica 和Maple 会做得更好。
无心人
发表于 2010-8-11 10:19:25
楼上,因为这两个都太数学化了
wayne
发表于 2010-8-11 10:28:50
27# forcal
提及MATLAB,我忍不住要说几句,
大学里面的什么自动化,机械电子,甚至经管,数学系的教科书都动不动就使用 MATLAB,还有计算机系根本就没怎么动及linux操作系统, 我甚是不解,真不知道搞大学教育的那些爷们是怎么吃这口教育饭的
wayne
发表于 2010-8-11 10:38:30
我看过不少国外影印版的英文教科书,工科方面的,就是自动控制,数字信号处理,图像处理什么的,也是大谈MATLAB,我想,MATLAB在中国教育界的盛行 大概就是中国教育制度跟在西方屁股后面,亦步亦趋的结果,
西化就西化呗,可三十年来就没怎么换过发型~~