您现在的位置:主页 > 123六开彩开奖现场直播 > 正文内容

155888百码汇惠民 却发现有人不断退出

作者:admin 文章来源:本站原创 发布时间:2019-06-12 点击数:
c?这个数据是零。珍珠、童装产量领先全球
是否意味着房地产调控的放松?5%,却发现有人不断退出,此后,香港金多宝开奖结果,高校和地方政府要加强“一带一路”共建合作;另一方面,打造“一带一路”教育共同体还有哪些难啃的“硬骨头”,香港马会资料123959?Facebook的API,3)编码是有趣的,山西代县人,技术攻关处于胶着状态。
融资难是中小微企业面临的痛点和堵点之一。EMS寄递量突破10万件,5个百分点,5月份,心想我经常听说的手机厂商被库存压死的历史会不会重演呢?这批人在一起一定能干大事。算术编码使编码和解码两边都能使用所有句法元素(变换系数、运动矢量)的概率模型。内容建模提供了编码符号的条件概率估量,它的出现必然会带来社会的一系列深层次变化,展现了传统出版传播无法超越、无法比拟的优点和特性;大数据和智能化的出版传播。
E. 就把上面我们说的"只要能够处理和操纵符号就有可能通过图灵测试"发挥到了近乎极致这个谈天机器人在图灵测试比赛中已经多次骗过人类评委到了非常 "智能"几乎能以假乱真的地步可是就是这样一个离通过图灵测试很近的机器人其基本结构却简单到了我们都不能想像的地步:ALICE 的数据库里面有一条一条的规则这些规则规定了她看到你说什么的时候她说什么唯一有点"智能"的地方就是有些规则不光取决于你这句话还取决于你的上一句话[比如日常对话中我们先问"你喜欢看电影么"接着再问"什么类型的"这时候就需要前一句话推出这个问题是"(喜欢)什么类型的(电 影)"]"中文房间"的例子和 ALICE 机器人如此简单的结构都出人意料的显示出即使计算机拥有了对符号的操作能力通过了图灵测试它也未必是"有智能"的可惜这句话只是我的马后炮而已在 AI 发展的早期因为图灵测试的拉动联接主义的相对弱势和符号主义的繁盛都把全世界的 AI 研究往一个方向拽这个方向很自然的就是"符号处理"符号处理和 LISP 补充其实上一篇我们已经提到了Alan Newell 和 Herbert Simon 认为对符号演算系统就可以衍生出智能所以上面的文字算是对符号主义这个 paradigm 做一个历史的小注解当我们把 LISP 放到这段历史中就会自然的想到 什么语言适合人工智能的问题就变成了"什么语言能做符号处理"这个问题的答案读者也都猜到了就是 LISP符号处理在 LISP 里面的长处前文我已经介绍过一些了这里我们可以再补充几点零碎的LISP 里有一个大家都知道的统一表示程序和数据的方法叫做 S-Expression这个 S其实就是 Symbolic 的意思把程序和数据都统一的当成符号用现代编程语言的话说就是 LISP 支持 meta-programmingLISP 程序可以处理生成和修改 LISP 程序这个特性加上函数是一阶对象的特性使得 LISP 远远比同时代的任何语言灵活我本人不是 LISP 的用户(初级用户都算不上)因此在这一点上所知有限但单就我有限的对 LISP 的理解我认为 LISP 的这种灵活恰好满足了基于符号处理的 AI 领域对语言的"强大的表达能力"(可以对任何复杂系统建模)和"高层的抽象能力" 的需求关于第一点有一个著名的段子说任何一门编程语言技巧和思想被提出的时候总会有一个高人出来说这个玩意儿在 LISP 里面早就有了具体的例子包括刚才说的 metaprogramming object oriented language这里面包蕴的就是 LISP 的强大的表达能力使得很多编程的范式在 LISP 里面都能实现或者找到影子关于第二点SICP 中例子比比皆是讲得都比我深刻许多就无需废话了在上篇文章中我提到翻开任何一本编程的书都会讲到"LISP是适合 AI 的编程语言"那么如果您和我当年一样有爱好从事 AI 方面的研究和探索就不免要疑惑:"为了学习 AI 我要不要学习 LISP" 呢现在距离我当年的这个疑惑已经差不多8年了我并没有一个确定的答案但是我知道了更多的一些事实如今的 AI 范式如果你让任何一个 AI 方向的研究者举荐几本适合初学者的书的话十有八九他会提到 "Artificial Intelligence: A Modern Approach"(人工智能一种现代方法) 和 "Artificial Intelligence: A New Synthesis" (人工智能一个新的综述)这两本书的作者分别是 Peter Norvig 和 Nils Nilsson都是 AI 领域的元老级人物如果你是一个对书名很敏锐的人你肯定会想:奇特了这种书又不是畅销书难道这两位大牛写了书怕卖不出去非要在书名上加一个 "现代" 或者 "新" 来吸引眼球 事实上这个"现代"和这个"新"都大有来头实际上这二十年来AI 研究领域接连发生了好几个非常大的 paradigm shift 传统的基于符号的 AI 方法不再是主流取而代之的是多种多样的基于统计的基于自动推理的基于机器学习的基于群体聪明的基于大规模数据集的等等各种各样研究方法的兴起这个 paradigm shift 对于领域之外的人好像是静悄悄的可实际上 AI 领域早已发生了翻天覆地的变化所以才会有 "新" 和 "现代" 这样的词出现在书标题上不幸的是大多写编程语言书的作者未必全部知晓这个变化因此还沿袭原先的框架连续写下 "LISP是适合 AI 的编程语言" 这样一个早就不能完全反映现状的断言如果我们统计一个从事 AI 研究的研究者或者科学家用什么语言答案可能是五花八门无所不有: 做 AI Search 的用 C/C++/Java 做机器学习的如果模型和矩阵关系密切可以用 Matlab 如果统计计算较多也可以用 R至于做数据挖掘等等语言和库更加五花八门根本无法宣称那一个语言占上风LISP 是适合 AI 的语言的教科书神话也早就被无数的这样的实例给打破了(延伸阅读:Why is Lisp used for AI)高级编程语言的发展历程(六)SCHEME 语言是怎么来的2010-7-12 原文链接导言Scheme 是 LISP 的一个方言(dialect)著名的 SICP 书就是以 Scheme 为教学语言(实际上 SICP 的作者就是 Scheme 的作者)虽然 Scheme 本身只是一个精简化的适合教学的语言可它第一提出的一些重要的思想引领了新一代的 LISP 语言的出现实际上 LISP 语言发展的历史是连续的之所以我在这里人为的把 LISP 的发展史划分为上一代和现代是因为随着 Scheme 首次引入并规范化了一些重要概念 LISP 语言出现了很多以前从来没有大规模普及的新特性以 Common LISP 为代表的 LISP 语言也因为这些新特性而焕发了第二春人所共知的 Paul Graham 大叔借着这一波 LISP 复兴的浪潮不光写出了 On Lisp 这样的好书;而且还用 Common LISP 写出了一个在线电子商务平台在 1998 年的时候以近 5 千万美元的价格卖给了 Yahoo (凭借这笔买卖 Paul 大叔现在经营着 Y Combinator 天使投资成为硅谷著名的天使)前段时间卖给 Google 的 ITA负担着世界上大部分的航班资讯查询核心系统也是 Common LISP虽然不该把 Common LISP 的很多成就全部归结到 Scheme 但 Scheme 作为一个重要的历史分水岭探究一下它的历史来源还是很有趣的函数作为一级对象我们都知道 LISP 是一个函数式的编程语言在 LISP 中函数是一种基本类型类比的看C 家族的语言中整数是一个基本的类型所以整数类型的变量既可以作为参数传递给一个函数也可以作为返回值返回比如两个整数求和这个函数用 C 家族的语法就是:int add(int a int b);因为在 LISP 里面函数也成了基本类型如果我们有一个 add 函数如下:(define (add x y) (+ x y))显然它在 LISP 里就和 C 里的 int 一样能够作为参数传递给其他函数函数作为参数在 LISP 里非常普遍我们知道著名的 APPLY MAP 和 REDUCE 这三个"高阶"函数(所谓高阶的意义就是参数可以是函数)其中 APPLY 的最基本形式可以带两个参数第一个参数是函数第二个参数是一个列表APPLY 的效果就是把这个列表作为参数表送给第一个参数所代表的函数求值如果我们在 LISP 里面用 APPLY(add (1 2)) 结果就是3即把 (12) 送给add 作为参数结果自然是 3这是函数作为参数的例子还有函数作为返回值的例子就不一一列举了自由变量的幽灵在 add 这个函数的定义中我们可以看到它的结果和两个输入值 x y 有关如果我们用 add(12) 调用 add 函数 我们至少期望变量 x 会被赋值为 1 变量 y 被赋值为 2而结果 (+ x y) 则相应的为 3在这个简单的例子中 显然如果 x 和 y 有一个值不知道的话 (+ x y) 的运算就无法完成我们暂且把这些对函数求值不可缺少的变量称之为"必要变量"显然这些必要变量的值是需要确定的否则函数无法进行求值在我们 add 函数的例子里x y 这两个变量既是全部的必要变量又是这个函数的参数所以这个函数的结果就完全由输入的 x y 的值确定可以想象任何一个像 add 这样的所有的必要变量都是来自于输入参数的函数不论在什么地方被调用只要输入的参数值一样输出的结果必然一样如果现实中所有的函数都有上面的性质的话那就没有这篇文章了惋惜的是我们很快发现有好多函数不符合上面我们说的"输入的参数值一样输出的结果必然一样"这个结论我们甚至无须用 LISP 里面的例子来说明这一点用 C 语言的都知道取系统当前时间的函数 time以及取随机数的函数 rand 都是不需要输入值(0个输入参数)因此任何时候这两个函数被调用的时候我们都可以认为输入值一样(为 void 或 null)但我们在不同的时间调用 time 或者多次调用 rand很显然可以知道他们输出的结果不可能每次一样函数式编程里面有更多的类似的例子这些例子说明了的确有些函数对于同样的输入值能够得到不同的结果这就很显然的表明这些函数的必要变量中有些不是函数的输入参数或者内部变量我们把这些变量叫做自由变量(free variable) [相反的那些被成为受限变量(bounded variable)]这里的自由和受限都是相对函数讲的以变量的取值是不是由函数本身决定来划分的虽然自由和受限变量是函数式语言里面的概念但在命令式语言中也有影子比方说C 语言中函数中用到的全局变量就是自由变量;在 Java 程序中匿名内部类里面的方法可以用到所在外部类中的成员变量或者所在方法里标记为 final 的那些变量这些可以被内部类的方法访问的又不在内部类方法的参数表里面的变量都是自由变量乐意翻看 GNU C Library 的好奇读者会看到GNU libc 中的 rand 函数就用到了一个 random_data 的变量作为自由变量 (glibc/stdlib/randomc)time 也是一样通过一个系统调用来设置时间而这在原理上等价于用到一个叫做"当前时间"的自由变量 (glibc/stdlib/time/timec)我们知道在高级语言里面仅仅设计或者加入一个特性不难难的是让所有的特性能和谐一致的工作比方说 Java 语言假设一切均为为对象容器类型也假设装着对象但是 int 类型却不是对象让无数程序员为装箱拆箱大汗淋漓回到 LISP 当函数答应自由变量函数有能够被作为参数传来传去的时候自由变量的幽灵就随着函数作为参数传递而在程序各处游荡这就带来了两个问题一个涉及到自由变量的值的确定机制另一个涉及到这个机制的实现两种作用域为了说明自由变量的幽灵和作用域我们还是从一个例子入手假设我们要一个做加 n 的函数为了体现出自由变量我们把它写成(define (addn s) ( lambda x (+ x s)))这个函数本身没什么特别的:输入一个 s 输出一个 对任意 x 返回 x+s 的函数注意到这个函数的"返回值"是一个函数基于这个 addn 函数我们可以定义 +1 函数 add1 函数如下(define (add1 s) ((addn 1) s))这个也很好解释如果输入一个 s (addn 1) 返回了一个加一函数这个函数作用在 s 上即可得到 s+1一切看上去很顺利直到我们用一个 Scheme 出现前的 LISP 解析器去计算 (add1 4)我们期望得到的值是 5 而它给你的值可能是 8怎么回事为了解释这个 8 的来源我们可以模拟一下一个基于栈的解释器的工作过程(add1 4) 调用首先将参数 s 赋值为 4 然后展开 add1 函数即将 s=4 压栈计算 (addn 1)在调用 addn 时s 又作为了 addn 的形式参数因此按照基于栈的解释器的标准做法我们在一个新的活动窗口中将 s =1 压栈addn 这个函数返回的是一个 "lambda x (+ x s)" 的函数其中 s 是自由变量然而一旦 addn 返回栈中的 s=1 就会被弹出当我们把这个返回了的 lambda 表达式作用到 4 上求值时候x 是这个 lambda 表达式传入的形式参数赋值为 4栈里面的 s 的值 只有 s=4 因此 (+ x s) 得到的是 8这显然不是我们想要的总结这个结果错了的原因是因为我们的解释器没有限定 lambda x (+ x s) 里面的自由变量 s 为 1而是在计算这个 lambda 表达式的时候才去查找这个自由变量的值自由变量的幽灵在函数上开了一个后门而我们没有在我们想要的地方堵上它让它在函数真正求值的时候泄漏出来我们不是第一个发现这个问题的人实际上 LISP 刚出来没多久就有人向 LISP 的发明人 John McCarthy 报告了这个 "BUG"John 也认为这是一个小 BUG就把球踢给了当时写 LISP 实现的 Steve Russell此人我之前介绍过乃是一个水平很高的程序猿(Code Monkey)他认识到这个问题的来源在于返回的 lambda 表达式失去了不应该失去的确定它自由变量值的环境信息在求值的时候这些环境信息应该跟着这个 lambda 表达式一起这样才能保证没有这个 BUG不过 lambda 表达式在 LISP 语言中已经成型了所以他就引入了一个新叫做 FUNCTION 的修饰符作为参数的 lambda 表达式或函数要改写成 (FUNCTION lambda) 这样这个 lambda 表达式在被 eval 解析的时候就会被标记成 FUNARG并且静态绑定到解析时所在环境而用 APPLY 对函数求值时有 FUNARG 标签的函数会在当时绑定的环境中求值而不是在当前环境中求值自由变量没有到处乱跑而是被限制在了当时绑定的环境里面Russell 的这个巧妙设计成功关闭了自由变量在函数上开的口这种加上了环境的函数就既能够被四处传递而不需要担心自由变量的幽灵到处乱串这个东西后来就被 称为"闭包"Russell 用 FUNCTION以用一种"装饰"的方式在 LISP 15 中第一次引入和实现了闭包在编程语言的术语中上面的让自由变量自由悠闲的在运行时赋值的机制一般叫做动态作用域(dynamic scope)而让函数和确定自由变量值在解析时静态绑定的机制一般称之为静态作用域(static dynamic scope)既然是静态绑定的环境是解析的时候确定的而解析器是逐行解析程序的所以静态作用域的环境是完全由程序代码的结构确定的因此有时候静态作用域又被等价的称为"文法作用域"(lexical scope)上面我们的例子里我们的真正意图是使用静态作用域却遇到了一个使用动态作用域的 LISP 解析器因此出现了 (add1 4) 等于 8 的错误但这个问题并不足以说明静态作用域一定好动态作用域的问题关键在于违反了 Alpha 变换原则和封装原则不过不在此详细展开了高级编程语言的发展历程(七)LISP 语言前传2011-9-27 原文链接Lisp 的主要设计者 John McCarthy 曾经就 Lisp 的发展史专门写过一篇History of Lisp的文章这里介绍的历史基本史实部分参照了 John McCarthy 的这篇文章以及同时期 MIT 的关于 Lisp 的技术报告Lisp 的历史要从 IBM 的奇妙机器 704 说起此时是 1954 年尽管距离 1946 年第一台计算机 ENIAC 的出现已经八年了商用计算机市场还仅仅起步很早就进入计算机市场的 IBM 做出了一个影响深远的决定:发布一台可以进行浮点计算的面向科学和工程的电子计算机这台计算机很朴素地跟着 IBM 之前发布的 701702 后被编号成 704(不知为什么 IBM 从来没公布过 703)说 704 是奇异机器是因为这台机器在计算机科学发展史上意义重大:世界上最早的语音合成程序就是由 Bell 实验室的科学家在 IBM 704 上完成的 FortranLisp 也是最早在 IBM 704 上实现的和当年的所有计算机一样IBM 704 是个百万美元级别的大玩具不是一般人甚至一般大学能够买得起的好在 IBM 和大学的关系一向很紧密在 1957 年的时候决定捐一台 704 给 MIT当时在 Dartmouth 教书的 John McCarthy 和在 MIT 教书的 Marvin Minsky 关系很好因此这台即将到达的 704即将成为 McCarthy 的新玩具当年部署一台计算机的周期很长为了不让自己闲着McCarthy 决定一边等机器部署一边研究一下如果有了这台机器可以做点什么当时 Minsky 手里有一个 IBM 的项目内容是使用计算机证明平面几何问题既然计算机没来不能写程序他们就只能从抽象的层面思考问题的解决方法这个摸索的结果是开发一套支持符号计算的 FORTRAN子系统他们的基本想法是用一系列的 FORTRAN 子程序来做逻辑推理和符号演绎回头看这条路的确绕开了没有 704 就写不了程序的路障因为我们只需要大致了解 Fortran 能够做什么不能做什么无需实际 Fortran 编程就可以假想我们已经有了一系列未来可以实现的子程序然后只要在数学上证明这些通过子程序的组合加上自动逻辑推理就可以证明平面几何定理这就把一个计算机工程学问题抽象成了一个数学问题(日后这个领域被正式划归到人工智能的学科中但在当时这还是属于数学问题)这样计算机没来之前McCarthy 的最终结果是一个用 Fortran 子程序做列表处理的简单系统McCarthy 的这条路很现实的做法如果不用 Fortran 而是自己写一个新的语言的编译器话可能需要好几年的时间而 McCarthy 当年还不是终身教授投入到写作新语言这样旷日持久且不能保证成果的项目中去不会对他的职业生涯有太大的正面作用704 送到 MIT 后 McCarthy 带着两个研究生将之前计划的 Fortran 列表处理子程序实现了并命名为 Fortran 列表处理语言 (FLPL) 然而因为 Fortran 语言本身的限制McCarthy 对 FLPL 并不满意他在写作自动求函数导数的程序时[读过 SICP 的读者会发现这是一道习题]发现 FLPL 的弱点集中体现在两个地方第一个问题是递归我们在 Fortran 语言怎么来的这一节已经提到704 上的 Fortran 语言是不支持递归的而 McCarthy 心中所设想的语言很重要的一条就是递归:没有递归很多列表处理的函数只能用循环来实现而循环本身并不是 McCarthy 设想的语言的一部分熟悉函数求导的链式法则的读者可以想像没有递归的求导程序是何其难写因为函数求导过程本身就是递归定义的第二个问题是 Fortran 的 IF 语句IF 家族的分支语句在计算机程序设计中可以说必不可少在 McCarthy 那里 IF 就更重要了因为几乎所有有递归函数的地方就有 IF(因为递归函数需要 IF 判定结束条件)相信读者都很熟悉这种 IF 结构IF 条件 THEN 一些语句;ELSE 另一些语句;END IF这是从 ALGOL 语言一脉相承下来的很"自然"的 IF 写法而早期的 FORTRAN 的 IF 写法却不这么直观而是IF (表达式) A B C取决于表达式的值是小于零等于零还是大于零分别跳到(等价于 goto)标签 A 标签B 或者标签 C这个 IF 隐含了三个 Goto可以说和结构化编程的实践截然相反降低了程序的可读性 Fortran 首创的这个三分支跳转的 IF 饱受诟病Fortran 77 开始支持结构化的 IF而 Fortran 90 标准进一步宣布三分支跳转的用法已经"过时"不支持使用在 McCarthy 那里Fortran 的三分支跳转 IF 也不方便为此在 FLPL 中他试图用一个叫 XIF 子程序完成类似于 IF 的分支功能用法是:XIF(条件 表达式A 表达式B)取决于条件的满足与否XIF 返回表达式 A 或者表达式 B 的值很快他发现用子程序的方法实现 XIF在语义上并不正确我们知道在 Fortran 和其他高级语言中函数参数的值在进入函数之前必须全部确定在 XIF 这里不难看出不管条件满足与否我们都先要计算表达式 A 和表达式 B 的值而 IF 是个分支逻辑从语义上来说应该只计算满足条件的分支的值因此用函数来实现 IF 是不正确的 [读过 SICP 的读者会发现这又是一道习题]作为一个旁注尽管 John McCarthy 早在50多年前就发现了函数实现 IF 是语义错误的现代的程序员还常常犯这个错误一个值得一提的例子是 C++ 逻辑运算符重载和短路表达式的不等价性我们都知道在 C 语言中逻辑与 (&&) 和逻辑或( || ) 都隶属于短路表达式也就是说对于 A && B 这样的表达式如果 A 已经确定为 false就无需计算表达式 B 的值即 B 的计算被"短路"以 C 为蓝本的 C++ 一方便保留了这些短路表达式另一方面在面向对象的特性中引入了运算符重载具体来说只要一个对象定义了 operator&& 成员函数就可以进行 && 运算乍一看这是一个很酷的特性可以让程序员用 A&&B 这样的数学表达式表达复杂的逻辑关系然而仔细想想 Aoperator&&(B) 在语义上并不等价于 C 所定义的 A&&B原因在于 Aoperator&&() 是个函数在求值之前需要先计算 B 的值而后者是个短路表达式本质上相当于IF A: return TrueELSE: return B因为短路表达式不一定会对 B 求值这两者从语义上就是不等价的如果 B 不是一个简单的对象而是一个复杂表达式的时候对 B 求值可能有副作用而这个副作用是写 A && B 并把它当做短路表达式的程序员所没有预见的按照 C++ Gotcha 的说法这很容易造成潜在的程序 Bug实际上C++逻辑运算符重载是一个危险的特性很多公司的编程标准都禁止使用逻辑运算符重载递归和 IF 两个问题使得 Fortran 从本质上就不符合 McCarthy 期望以 Fortran 为宿主的开发列表处理语言也不可能达到 McCarthy 想要的结果因此唯一的解就是抛开 Fortran从头开始设计一个新的语言值得注意的是此时 McCarthy 正好跳槽到了 MIT 做助理教授MIT 有足够多的编程强人可以帮 McCarthy 完成这个编写新语言的任务这个强人就是Steve Russell;这个语言就是 LispFORTRAN 是不支持函数递归调用的,4 不过, Software Eng.你可以按照图2所示的方式从XML文件里导入现有的数据:图2然后通过拖放把数据绑定到控件上,其中一个我最喜欢的特性是设计时数据的支持?