
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
在一些资讯频道上看到很多的关于编程方的知识和编程知识,在这里佛山IT培训的小编就给大家介绍很多编程方面的知识和技巧,下面给大家介绍的几种编程语言希望对大家能够有一定的帮助;
一、声明式编程(Declarative programming)
示例语言:Prolog, SQL
声明式编程已经存在了许多年,但大多数程序员仍然不知道它是怎样的概念。简单来说:在大多数主流语言中,开发者是在描述如何解决一个特定的问题;在声明式语言中,你只需要描述你想要的结果,而语言本身确定如何到达那里。
例如,如果你使用C语言从头开始写一个排序算法,你可能会为合并排序写一个说明,一步一步的描述如何递归地将数据集分割成两部分并将其合并到一起:这里是一个例子。如果使用声明式语言如Prolog来进行数字排序,可直接描述你想要的输出:“我想要相同的值列表,但每个索引i中的每个项目都应小于或等于索引为i+ 1的项”。将前面的C语言解决方案和下面的Prolog代码进行对比:
sort_list(Input, Output) :-
permutation(Input, Output),
check_order(Output).
check_order([]).
check_order([Head]).
check_order([First, Second | Tail]) :-
First =< Second,
check_order([Second | Tail]).
如果你使用过SQL,那么你已经使用了声明式编程,可能自己没有意识到这一点:当你发出一个像 select X from Y where Z 这样的查询,你就是在描述你想要返回的数据集;数据库引擎的工作实际上是如何执行查询。你可以在大多数数据库中使用 explain 命令来查看执行计划并弄清楚在引擎下发生了什么。
声明式语言之美在于它们允许你在更高层次的抽象下工作:你的工作就是描述你想要的输出规格。例如,在Prolog语言中一个简单的数独求解器的代码只需要列出每行,每列,和一个解决的数独难题的对角线应该看起来的样子:
sudoku(Puzzle, Solution) :-
Solution = Puzzle,
Puzzle = [S11, S12, S13, S14,
S21, S22, S23, S24,
S31, S32, S33, S34,
S41, S42, S43, S44],
fd_domain(Solution, 1, 4),
Row1 = [S11, S12, S13, S14],
Row2 = [S21, S22, S23, S24],
Row3 = [S31, S32, S33, S34],
Row4 = [S41, S42, S43, S44],
Col1 = [S11, S21, S31, S41],
Col2 = [S12, S22, S32, S42],
Col3 = [S13, S23, S33, S43],
Col4 = [S14, S24, S34, S44],
Square1 = [S11, S12, S21, S22],
Square2 = [S13, S14, S23, S24],
Square3 = [S31, S32, S41, S42],
Square4 = [S33, S34, S43, S44],
valid([Row1, Row2, Row3, Row4,
Col1, Col2, Col3, Col4,
Square1, Square2, Square3, Square4]).
valid([]).
valid([Head | Tail]) :- fd_all_different(Head), valid(Tail).
下面是如何运行上面的数独求解器:
| ?- sudoku([_, _, 2, 3,
_, _, _, _,
_, _, _, _,
3, 4, _, _],
Solution).
S = [4,1,2,3,2,3,4,1,1,2,3,4,3,4,1,2]
不幸的是,声明式编程语言的性能开销比较大。上面的单纯排序算法的复杂度接近O(n!);数独求解器使用暴力搜索;而且大多数开发人员不得不提供数据库提示和额外索引,以避免执行SQL查询时的昂贵和低效的计划。
二、符号式编程(Symbolic programming)
示例语言:Aurora
Aurora语言是符号式编程的一个例子:使用符号编程语言编写的“代码”不仅包括纯文本,还包括图像、数学方程、图、图表等。这允许你以数据的原生格式来操作和描述大量的数据,而不是完全用文本来描述它。Aurora是完全交互式的,它会立即显示每行代码的结果,像steroids中的REPL。
Aurora语言是由Chris Granger创造的,他还创建了Light Table IDE。克里斯在他的文章《为了更好地编程》中描述了创建Aurora的动机,目标是使编程更直观,直接,减少偶然的复杂性。欲了解更多信息,请参见Bret Victor的演讲:Inventing on Principle, Media for Thinking the Unthinkable, and Learnable Programming。
更新:“符号编程”可能不是适用于Aurora。更多信息参见维基百科上的“符号编程”的维基主页。
三、基于知识的编程(Knowledge-based programming)
示例语言:Wolfram语言
与上面提到的Aurora语言很像,Wolfram语言也是基于符号编程的。然而,符号层仅仅是提供一种与Wolfram语言核心一致的接口,Wolfram语言是基于知识的编程语言:内置了大量的库、算法和数据。这使得可以轻松地从图形化的Facebook连接,到处理图像,查找天气,处理自然语言查询,绘制地图上的方向,解决数学方程等等。 更新:虽然Wolfram声称Wolfram语言支持“符号式编程”和“知识编程”,但这些术语的定义是有所不同的。更多信息请参阅 Knowledge level 和 Symbolic Programming 的维基主页。
我猜想Wolfram语言拥有现存语言中最大的“标准库”和任何现有语言的数据集。我被“互联网连接(Internet connectivity)是代码编写的固有部分”这个想法所打动:它就像一个通过谷歌搜索来实现自动完成功能的集成开发IDE。这将是非常有趣的,看看符号编程模型是否像Wolfram声称的那样灵活,可以真正利用所有这些数据。
看了上面的这些知识和信息,如果大家对编程技术或者对IT技术方面感兴趣,欢迎来佛山达内培训机构进行更多的了解和咨询;