Lisp之根源】的更多相关文章

Lisp之根源 --- 保罗格雷厄姆 来源 http://daiyuwen.freeshell.org/gb/rol/roots_of_lisp.html 约翰麦卡锡于1960年发表了一篇非凡的论文,他在这篇论文中对编程的贡献有如 欧几里德对几何的贡献.1 他向我们展示了,在只给定几个简单的操作符和一个 表示函数的记号的基础上, 如何构造出一个完整的编程语言. 麦卡锡称这种语 言为Lisp, 意为List Processing, 因为他的主要思想之一是用一种简单的数据 结构表(list)来代表代…
原文:http://www.paulgraham.com/rootsoflisp.html 约翰麦卡锡于1960年发表了一篇非凡的论文,他在这篇论文中对编程的贡献有如 欧几里德对几何的贡献.1 他向我们展示了,在只给定几个简单的操作符和一个 表示函数的记号的基础上, 如何构造出一个完整的编程语言. 麦卡锡称这种语 言为Lisp, 意为List Processing, 因为他的主要思想之一是用一种简单的数据 结构表(list)来代表代码和数据. 值得注意的是,麦卡锡所作的发现,不仅是计算机史上划时…
LISP的介绍:Paul Graham 的主页 http://paulgraham.com/index.html Lisp之根源 - 保罗·格雷厄姆 http://daiyuwen.freeshell.org/gb/rol/roots_of_lisp.html 创造者的鉴赏力 - 保罗·格雷厄姆 http://daiyuwen.freeshell.org/gb/taste/taste.html 为什么Lisp语言如此先进?(译文) http://www.ruanyifeng.com/blog/2…
程序功能是从一个英文文本中得到单词表,再得到押韵词表.即输出可能这样开始: a ameoeba alba samba marimba... 这样结束: ...megahertz gigahertz jazz buzz fuzz 有了这么一个表,诗人会爽很多. 算法:得到单词表后,先把单词反序,用sort函数对所有反序单词排序,排好后再反序. 我叽里呱啦地写完了,用了630KB的2100行的文本来测试一下.time一下main函数,30多秒……现在用了如题的两个工具,程序跑到了0.08s! 首先,…
     大概不少programmer都看过<黑客与画家>,作者用了整整一章的篇幅讨论Lisp的强大.我自然就会手痒痒.      几个月前,几天内攻城略地搞定了Python,用的方法便是用Py重写之前开发的类库,这样就能很快熟悉语法,培养语感.喜上眉梢的我,也尝试将同样的策略用在Lisp上,我开始查看它的语法和函数,比如如何定义类和函数,如何赋值等等.      但我慢慢发现,Lisp几乎都不需要学语法,就是括号和几个基本过程,无非就是lambda, define, let,cons,car…
Ok, Go ahead. 1 (a) (b) (c) (d) 2 注:union 在 Common Lisp 中的作用就是求两个集合的并集.但是这有一个前提,即给的两个列表已经满足集合的属性了.具体的操作过程似乎是对第一个 list 中的每一个元素在第二个 list 中查找,如无则标记一下:待第一个 list 的所有元素在第二个 list 中查完以后将所有标记过的元素放入一个 list 中与第二个 list 进行合并.这意味着,如果刚开始给的两个 list 不完全满足集合的属性,则会有重复出现…
    Lisp语言是第二古老的高级编程语言.许多的黑客和开发者对Lisp推崇备至,Paul Graham甚至说"编程语言现在的发展,不过刚刚赶上1958年Lisp语言的水平".     然而这样先进的语言在现在使用的编程语言从来没有排到前20,听说它的人不少,用的人却非常少.     许多人对Lisp语言的第一印象就是一层层的括号,很老的关于苏联黑客偷到Lisp源码的最后一页全是括号的笑话就不用再说了. 造成Lisp程序如此多括号的原因就是S表达式.所谓S表达式,是指一种以人类可读的…
首先,在对 Lisp 有一丢丢的了解下读这篇文章会大大激发你学下去的欲望.之后可以看作者的著作<ANSI Common Lisp>. 想要体会一下 Lisp 的强大,本文是不二之选. Concept atom list Primitive Operators atom eq car cdr cons cond quote Other defun lambda Type 'a 'b ... "string" 1 2 3 ... () nil 't 就上面这些,作者搞了一个 e…
一堆奇怪的错误:1⃣️could not build module 'XXXXXXXX' 2⃣️error: expected identifier or '(' 3⃣️EDIT Setting Precompile prefix header = No results in a bunch of syntax errors instead, in stuff like NSObject.h (and other 4⃣️Foundation framework header) 5⃣️EDIT U…
Handling Automation errors in Visual LISP 翻译自原文Kean's blog:http://through-the-interface.typepad.com/through_the_interface/2006/08/handling_automa.html 自从VLisp被推广,开发者便利用它的能力优势来引用COM自动化接口.这种使LISP平台增加许多新的扩展的功能,就像你能通过召唤ObjectARX 程序来实现定义LISP函数.但是,自动操作LISP…
1. Write a procedure count-list to count the number of elements in a list (defun count-list (numbers) ( (+ (count-list (rest numbers))))) (print (count-list '(1 2 3)))5 6 result: 3 2. Write a procedure reverse-list to reverse each word in a list of w…
第三方软件库: http://download1.rpmfusion.org/free/fedora/releases/25/Everything/x86_64/os/repoview/index.html 原帖http://www.linuxdown.net/install/soft/2016/0303/4903.html 安装vim sudo dnf -y update sudo dnf install vim-enhanced common lisp 原帖:http://www.progr…
1, 在emacs C-x C-W 文件另存为保存所有REPL过程 由于 (load "foo.lisp")时只有定义语句可以正确执行, 执行语句不可正确被 (load "foo.lisp")解析执行 所以脚本写成了这个样子, 脚本名 parse_lisp_code.sh #!/bin/bashif [ -n "$1" ]; then   sed 's/CL-USER>//' $1 | expand -t 8 | egrep '^ *\(d…
(defun rmapcar (fn &rest args) (if (some #'atom args) (apply fn args) (apply #'mapcar #'(lambda (&rest args) (apply #'rmapcar fn args)) args))) 这段代码第一眼看上去,怎么都像无限递归,不断的用&rest对参数做list,然后用mapcar做car,但是这段代码又是确确实实能运行的.仔细分析以后,可以肯定哪个函数的调用对参数多做了一次类似ca…
流水账而已,分享给需要的人. slimv的首页 http://kovisoft.bitbucket.org/tutorial.html里面介绍说slimv开箱即可用,可是老天总会给一些奇怪的问题给你,因为是vim新手,对教程给出的windows配置没有太在意,直接拷贝,修改了路径,但是发现vim无论如何都不能连接到SWANK,每次就是弹出个SBCL的交互环境. 于是仔细看了windows配置的命令行,是给ccl用的,而我这里是想用sbcl(因为这个支援更多),当看到"-l"参数时,猜测…
看到ANSI Common Lisp 第三章的游程编码时,就发现作者很准确的使用了list和cons来生成目标列表,虽然list是由cons扩展而来,区别也仅仅是最后一个元素的加入方式,于是勾起了之前对cons的疑问. 当看到下面的这样的代码: (cons '(a b) '(c d)) 你会觉得输出结果是 ((a b) (c d)) 还是 ((a b) c d) 虽然敲入一下代码,就知道是后者,可是,为什么呢? 仔细看第三章cons的说明,发现cons放在c语言里面,无非就是一个如下的结构 ty…
ANSI Common Lisp 第二章 课后习题 7.只使用本章所介绍的操作符,定义一个函数,它接受一个列表作为实参,如果有一个元素是列表时,就返回真. (defun have-list (lst) (if (null lst) nil (do ((i lst (setf i (cdr i))) (exis nil)) ((null i) exis) (setf exis (and (listp (car i)) (not (null i))))))) 测试如下 当看到(have-list '…
两种出错处理方式:一种是对出错函数进行重定义,一种是对错误进行捕捉处理. ;;=================================================================================================== ;;=================================================================================================== ;;=======…
;;本专题所讲述的内容是人机交互以及常规数据处理技术;;★★★01.人机交互★★★;;△△△键盘输入交互△△△(getint "请输入整数");;从键盘输入整数,如果不是整数则重复提示输入整数直到输入的是整数.类似的函数[输入整数 getreal][输入字符串 getstring][控制和输入关键字 initget getkword] ;;△△△数据输出△△△(princ "The \"allowable\" tolerance is\"&quo…
很久以前,就准备学习Lisp,但是遇到不少困难,社区太凌乱,也一直很犹豫,直到看了<Common Lisp - 想说爱你不容易>,想看看Common Lisp怎么样,之前都是拿Lisp的方言Schemel来练习的.正好有一篇Windows下如何安装使用CLISP的文章<Lisp语言: 在Windows下搭建CLisp环境>,于是在官网下载了一个安装程序 http/SF     (sources and win32),下载win32那个.安装很简单,一路下来即可.打开主界面,马上写几…
1  无意看到"丢弃重口味的xml配置--spring4用groovy配置bean",这篇文章,里面说到spring4开始可以使用Groovy进行配置,可以取代xml方式和注解方式. 为此,我百度百科了下"Groovy和gradle",发现原来啊 groovy也是支持函数式编程的. 函数式编程中最古老的例子莫过于1958年被创造出来的LISP了,透过 LISP,可以用精简的人力.较现代的例子包括Haskell.Clean.Erlang和Miranda等. 2 对Li…
It has been a long time that I haven't dealt with my blog. On one hand I was preparing the exams.On the other hand I just learn more things and take some documents at local PC. As a result, I begin to learn Lisp as planned. 2.10 Variables let ; defin…
我想说说关于common lisp的开发环境问题,学习一个新的语言,如何最简单的搭建一个开发环境是至关重要的,它应该不让你在其他方面花费太多的精力,而只专注于学习语言本身. 其实我刚开始尝试的并不是commonlisp而是clojure,但是搭建开发环境让我有点灰心,可能跟二教这边的网速有关系吧,有个文件总是无法下载...伤心 commonlisp有个很好的wiki叫cliki,里面提供很多诸如开发环境,教程,工具,包等的内容,是一个非常好的资源,在实用commonlisp一书中推荐了一个lis…
说说我自己的背景吧,我是个半吊子的程序员,做任何事情喜欢比较了解然后再尝试,我接触过很多语言,大多数都把它当成工具来使用 我现在的工作大部分主要在于数据挖掘与机器学习方面,也学习web开发,我第一个拿来工作的语言是python,我是从那里得知函数式编程的概念的 说起lisp据说python就是模仿的lisp,而得知这个语言是从黑客与画家这本书中得知的,据说是一个特别值得尝试的语言,由于作者说如果年龄超过25岁,最好不要尝试学习它,我明年就本命年了,看来应该试着尝试一下了 在之前面临招工作的时候曾…
原文:Lisp Style Tips for the Beginner 本篇文章是一篇非正式的摘要,旨在帮助新手写出高效.易读的Lisp代码. 1 赋值   1.1 避免使用eval.赋值是Lisp内置的流程,所以你几乎没有任何理由自己调用它.如果你使用了它,那么请停下来并且重新思考一下你的问题,因为你解决问题的方法一定是错的. 1.2 熟悉宏.它是Lisp的一个重要特性,但是一个实现的很差的宏可以引起很严重的错误,而且对新手来讲很难解决.在你理解Lisp的解释器工作之前避免使用宏.绝不要编写宏…
说明:Visual Lisp属性的获取.赋值和方法的执行有多种形式.然而对于初学者来说一次性就要全部掌握显然是没有必要的,有时候每种方法都是通用的功能都一样我们就没有必要把所有方法都记住.我们只需要掌握常用的通用性最强的即可.这里方法和属性只用下面几种方式,对于方法名和属性名统一用双引号 “” ,且第一个字母大写,避免混乱. 知识点:;;;查看对象的属性和方法(vlax-dump-object obj T) ;;;方法与属性是否适用于某对象(vlax-property-available-p o…
关于图片居中对齐的问题,进入前端行业虽然有一段时间了,以为自己懂了,可是实际上还是一知半解,找了一些博客来看了一下,但是感觉讲的有点碎,看完还是一知半解. 查阅了一下<css权威指南>,结合遇到的问题,这才了解到前前后后的问题根源. 主要的问题如下: 1.line-height是个什么东西,范围在哪里,具体应用于什么元素? 2.vertiacal-align和line-height有什么关系,元素对齐到底是一个什么样的过程. 3.图片对齐和文本对齐有什么区别? 4.浮动元素为什么对齐会出现问题…
newLISP 10.5.3 修复了一些 bug ,为 KMEANS 集群分析器增加了一些函数. newLISP是一个类似Lisp语言的.用于一般用途的脚本语言.它具有 LISP 语言所有的魔力,但更容易学习和使用. newLISP是友好的,快速和简小的.大部分您需要的功能都将已经内置. 下面是一段示例代码: (command-event (fn (s) (local (request) (if (find "?" s) ; is this a query (begin (set 'r…
Difference between LET and LET* in Common LISP   LET   Parallel binding which means the bindings come to life at the same time and they do not shadow each other. The values are effective inside LET and they are undefined outside LET. Just like local…
L-99: Ninety-Nine Lisp Problems 列表处理类问题的解答,用Scheme实现,首先定义几个在后续解题中用到的公共过程: ; common procedure (define (check-element xs f) (call/cc (lambda (break) (for-each (lambda (x) (if (f x) (break #t))) xs) #f))) (define (foldl f init xs) (define (iter xs acc)…