lisp 订阅
LISP是定位编号分离协议的英文Locator ID Separation Protocol的缩写。实质是一个IPinIP的协议。 展开全文
LISP是定位编号分离协议的英文Locator ID Separation Protocol的缩写。实质是一个IPinIP的协议。
信息
外文名
Locator ID Separation Protocol
缩    写
LISP
中文名
定位编号分离协议
实    质
IPinIP的协议
LAMMPS简介
其主要思想早在15年前就已经被人提出来进行研究,然而一直没有太具体的东西产出。直到2006年,Cisco重新开始投入资源进行研究.但就应用来说。Cisco的LISP也只处于试验阶段,距离能够推广商用还有不短的时间,很多技术细节方面问题需要解决。LISP提出将标识Locator的IP(RLOC)和标识目的节点ID的IP(EID)进行区分和叠加封装,在公网传输时只根据Locator IP转发,只有到达站点边缘时才会剥离外层IP,使用内层标识EID的IP进行转发。
收起全文
精华内容
参与话题
问答
  • lisp基本语法——(一)

    万次阅读 2017-10-07 17:21:09
    lisp基本语法——(一) 本文主要参考: http://www.gigamonkeys.com/book/syntax-and-semantics.html 好,下面看一个截图 这里面有基本的语法。 1、函数调用 (function-name argument*) 2...

    lisp基本语法——(一)

    本文主要参考:
    http://www.gigamonkeys.com/book/syntax-and-semantics.html

    好,下面看一个截图


    这里面有基本的语法。
    1、函数调用
    (function-name argument*)

    2、if判断
    (if x (format t "yes") (format t "no"))

    3、quote操作符

    4、eql,用来判断是否相同

    5、Truth、Falsehood和Equality
    T和NIL,其中T是true,NIL是Falsehood。

    6、还有一些代码格式的说明,具体可以看下这样的代码格式,方便阅读。


    记得最后的回括号不要回车到下一行,比如下面的这种是不推荐的代码格式:




    展开全文
  • LISP

    千次阅读 2015-05-25 19:18:14
    Lisp,最初被拼为LISP,一个历史悠久的电脑编程语言家族。最早由约翰·麦卡锡在1958年基于λ演算创造,演化至今,是历史第二悠久的高级语言,仅次于Fortran,也是第一个函数式编程语言。 其名称源自列表处理器...

    Lisp,最初被拼为LISP,一个历史悠久的电脑编程语言家族。最早由约翰·麦卡锡在1958年基于λ演算创造,演化至今,是历史第二悠久的高级语言,仅次于Fortran,也是第一个函数式编程语言

    其名称源自列表处理器英语List Processor)的缩写。LISP有很多种方言,各个实现中的语言不完全一样。LISP语言的主要现代版本包括Common Lisp, SchemeRacket以及Clojure。1980年代盖伊·史提尔二世编写了Common Lisp试图进行标准化,这个标准被大多数解释器和编译器所接受。还有一种是编辑器Emacs所派生出来的Emacs Lisp(而Emacs正是用Lisp作为扩展语言进行功能扩展)非常流行,并创建了自己的标准。

    历史

    1955年至1956年间,信息处理语言被创造出来,用于人工智能处理(早期的基于符号处理的人工智能领域,以图灵测试为目标)。此领域中有研究者持有观点:“符号演算系统可以派生出智能。”[1])。它首先使用了列表 (抽象数据类型)递归

    1958年,约翰·麦卡锡麻省理工学院发明了Lisp这个编程语言,采用了信息处理语言的特征。1960年,他在《ACM通讯》发表论文,名为《递归函数的符号表达式以及由机器运算的方式,第一部》(Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I)。在这篇论文中,他展示了,只要通过一些简单的运算符,以及用于函数的记号,就可以创建一个具图灵完备性语言,可用于算法中。

    麦卡锡最初使用M表示式(M-expression)写成代码,之后再转译成S表示式,举例来说,M表示式的函数语法,car[cons[A,B]],等同于S表示式(car (cons A B))。然而由于S表示式具备同像性的特性(homoiconic,即程序与数据由同样的结构存储),实际应用中一般只使用S表示式。此外,他也由借用了信息处理语言中的许多概念。

    约翰·麦卡锡的学生史帝芬·罗素在阅读完此论文后,认为Lisp编程语言当中的eval函数可以用机器码来实做。他在IBM 704机器上,写出了第一个LISP解释器。1962年,蒂姆·哈特(Tim Hart)与麦克·莱文(Mike Levin)在麻省理工学院,以Lisp语言,实做出第一个完整的lisp编译器。

    基本介绍

    LISP是第一个函数式程序语言,区别于C语言Fortran等命令型程序语言和JavaC#Objective-C等面向对象程序语言。

    由于历史的原因,Lisp长期以来被认为主要用于人工智能领域,但Lisp并不是只为人工智能而设计,而是一种通用的程序语言。

    Lisp的表达式是一个原子(atom)或表(list),原子(atom)又包含符号(symbol)与数值(number);表是由零个或多个表达式组成的序列,表达式之间用空格分隔开,放入一对括号中,如:

    abc
    ()
    (abc xyz)
    (a b (c) d)
    

    最后一个表是由四个元素构成的,其中第三个元素本身也是一个表,这种list又称为嵌套表(nested list)。

    正如算数表达式1+1有值2一样,Lisp中的表达式也有值,如果表达式e得出值v,我们说e返回v。如果一个表达式是一个表,那么我们把表中的第一个元素叫做操作符,其余的元素叫做自变量。

    Lisp的7个公理(基本操作符)

    基本操作符1 quote

    (quote x)返回x,我们简记为'x

    (quote a)
    

    上面的表达式的值是a。如果使用C语言或者Java语言的表达方式,可以说成:上面这段代码返回的值是a。

    'a
    

    这个表达式和上面的那个相同,值也是a。将quote写成 ' 只是一种语法糖

    quote起来的单一个元素会成为symbol(例如'a)。symbol是Lisp中的一个特别概念,他在代码中看起来是个string,但并不尽然,因为symbol其实会被Lisp解释器直接指向某个存储器位置,所以当你比较'apple和'apple两个symbol是否相同时,不需要像是比较string一样一个个字元逐字比较,而是直接比较存储器位置,故速度比较快(使用eq运算符来比较,如果使用equal运算符会变成逐字比较)。当你定义一个函数,或者定义一个变量时,他们的内容其实就是指向一个symbol。

    基本操作符2 atom

    (atom x)当x是一个atom或者空的list时返回原子t,否则返回NIL。在Common Lisp中我们习惯用原子t表示真,而用空表 () 或NIL表示假。

    > (atom 'a)
    t
    > (atom '(a b c))
    NIL
    > (atom '())
    t
    

    现在我们有了第一个需要求出自变量值的操作符,让我们来看看quote操作符的作用——通过引用(quote)一个表,我们避免它被求值(eval)。一个未被引用的表达式作为自变量,atom将其视为代码,例如:

    > (atom (atom 'a))
    t
    

    这是因为(atom 'a)的结果(t)被求出,并代入(atom (atom 'a)),成为(atom t),而这个表达式的结果是t。

    反之一个被引用的表仅仅被视为表

    > (atom '(atom 'a))
    NIL
    

    引用看上去有些奇怪,因为你很难在其它语言中找到类似的概念,但正是这一特征构成了Lisp最为与众不同的特点:代码和数据使用相同的结构来表示,只用quote来区分它们。

    基本操作符3 eq

    (eq x y)当x和y指向相同的对象的时候返回t,否则返回NIL,值得注意的是在Common Lisp中,原子对象在内存中只会有一份拷贝,所以(eq 'a 'a)返回t,例如:

    >(eq 'a 'a)
    t
    >(eq 'a 'b)
    NIL
    > (eq '() '())
    t
    > (eq '(a b c) '(a b c))
    NIL
    

    基本操作符4 car

    Contents of the Address part of Register number缩写

    (car x)要求x是一个表,它返回x中的第一个元素,例如:

    > (car '(a b))
    a
    

    基本操作符5 cdr

    (cdr x)同样要求x是一个表,它返回x中除第一个元素之外的所有元素组成的表,例如:

    > (cdr '(a b c))
    (b c)
    

    基本操作符6 cons

    (cons x y)返回一个cons cell(x y),如果y不是一个list,将会以dotted pair形式展现这个cons cell,例如:

    >(cons 'a 'b)
    (a . b)
    

    一个cons cell的第二项如果是另一个cons cell,就表示成表的形式,例如:

     (cons 'a (cons 'b 'c))
    

    就表示成 (a b . c) 若一个cons cell第二项为空,就省略不写,例如:

     (cons 'a  (cons 'b ()))
    

    表示为 (a b) 这样,多重的cons cell就构成了表:

    > (cons 'a (cons 'b (cons 'c ())))
    (a b c)
    

    基本操作符7 cond

    (cond (p1 e1) ...(pn en))的求值规则如下.对“条件表达式p”依次求值直到有一个返回t.如果能找到这样的p表达式,相应的“结果表达式e”的值作为整个cond表达式的返回值.

    > (cond ((eq 'a 'b) 'first)  ((atom 'a)  'second))
     second
    

    函数

    七个原始操作符中,除了quote与cond,其他五个原始操作符总会对其自变量求值.我们称这样的操作符为函数.

    语法和语义

    Scheme的Hello World程序

    (display "Hello, world!")
    ;; 在屏幕中打印出: Hello, world!
     
    ;; 函数定义
    (define (hello)
      (display "Hello, world!"))
     
    ;; 函数调用
    (hello)
    ;; 在屏幕中打印出: Hello, world!
    

    Common Lisp的Hello World程序

    (format t "hello, world!")
    ;; 在屏幕中打印出: hello, world!
     
    函数定义:
    (defun hello-world ()
      (format t "hello, world!"))
    调用函数:
    (hello-world)
    ;; 在屏幕中打印出: hello, world!
    ;; 并以NIL作为函数的返回值
    

    Clojure的Hello World程序

    (print "hello, world!")
    ;; 在屏幕中打印出: hello, world!
     
    ;; 函数定义:
    (defn hello-world []
      (print "hello, world!"))
    ;; 调用函数:
    (hello-world)
    ;; 在屏幕中打印出: hello, world!
    ;; 并以 nil 作为函数的返回值
    

    Lisp的宏

    Lisp的语法结构使数据与程序只是一线之隔(有quote就是数据,没quote就是程序)。由于Lisp这种“数据即程序、程序即数据”的概念,使Lisp的(Macro)变得非常有弹性:你可以定义宏,指定它应该被编译器翻译(宏展开)成什么程序,程序和数据都可以灵活地互相转换,最后展开的代码会成为整个程序的一部分。宏的实现非常倚重quote来达成。当你定义了一个宏,宏被quote的部分会先被编译器unquote,而没有quote、或已经被unquote的部分,则会先被求值。最终编译器生成的整个程序代码才是最后运行时的代码。以下以广泛使用的Emacs Lisp为示例(以下示例亦兼容Common Lisp),解释最基本的Lisp宏。

    想要创建一个list并赋予给fruit这个变量时不能这样做,因为这个list没有被quote过,会被编译器视为“程序”运行(会把"apple"这个字符串当成函数解释),而不是“数据”,因而产生错误:

    > (setq fruit ("apple" "banana" "citrus"))
    錯誤:"apple" 不是一個有效函數。
    

    但这样就正确了:

    > (setq fruit (quote ("apple" "banana" "citrus")))
    ("apple" "banana" "citrus")
    ;; 或者
    > (setq fruit '("apple" "banana" "citrus"))
    ("apple" "banana" "citrus")
    ;; 也可以用(list...)運算子,這樣一樣可以建立list。因為list本身是個函數,本來就應該被當成程式執行而不是資料,所以不會報錯:
    > (setq fruit (list "apple" "banana" "citrus"))
    ("apple" "banana" "citrus")
    

    前面有提到使用'符号这个语法糖能够代替quote,但还有另外一种符号是`,意义基本上与'相同,但被`包起来的部分可以再用来unquote;而'没有这种能力。

    也就是说被`给quote起来的部分是数据,但使用逗号“,”来unquote,令被quote的数据变回程序。(注意quote只有一个arg,所以arg要用list包起来)

    ;; 使用`來quote整個list
    > `("apple" "banana" "citrus")
    ("apple" "banana" "citrus")
     
    ;; 使用逗號,來unquote,這樣fruit這個變量會被重新求值。
    > `("apple" "banana" "citrus" ,fruit)
    ("apple" "banana" "citrus" ("apple" "banana" "citrus"))
     
    ;; 可以利用unquote的特性,定義一個函数,讓該函数根據輸入的參數回傳一個我們想要的list数据結構:
    (defun user-profile (name email mobile)
      `((name . ,name)
        (email . ,email)
        (mobile . ,mobile)))
     
    (user-profile "Richard" "rms@gnu.org" "Noooo!")
    => ((name . "Richard")
        (email . "rms@gnu.org")
        (mobile . "Noooo!"))
    

    简易宏示例

    这里定义一个宏叫做nonsense,这个宏可以方便地定义更多以nonsense为开头的新函数:

    (defmacro nonsense (function-name)
      `(defun ,(intern (concat "nonsense-" function-name)) (input) ;intern可以將string轉成symbol
         (print (concat ,function-name input))))
    ;; 解釋:
    ;; 這個宏在編譯時,`(defun  因為被quote所以不會被求值,
    ;; 但裡面的,(intern ...) 這一段從逗號開始,整個括號括起來的
    ;; s-expression部份會被求值。這時作為argument輸入的function-name
    ;; 就是在這時被插進macro中。其餘剩下的部份因為仍然在`(defun的quote
    ;; 影響之下,並不會被求值。
    ;; 現在宏展開完了,整個宏才被當成一般function執行。
     
    (nonsense "apple") ;使用我們剛剛定義的 nonsense 這個macro來定義新的f函数
    => nonsense-apple  ;成功定義出了新的函数叫做 nonsense-apple
     
    (nonsense "banana") ;再使用一次宏來定義新的函数叫做 nonsense-banana
    => nonsense-banana  ;成功定義了新的函数。
     
    (nonsense-apple " is good")		;使用剛剛定義出的新函数
    => "apple is good"
    (nonsense-banana " I love to eat")	;使用另一個剛剛定義函数
    => "banana I love to eat"
    

    注释

    参见

    Wikibooks-logo.svg
    您可以在维基教科书中查找此百科条目的相关电子教程:

    外部链接

    展开全文
  • 编写并运行第一个Lisp程序

    万次阅读 2017-11-26 10:09:05
     为了能够弥补工作中那种浪费时间的懊悔感,我决定学习一个新的编程语言,初步选定了lisp。倒是没有特别的因由,只是随便想到了就选择了。这个纯粹是一种赎罪式消磨时间的学习,倒也不期望自己能够学到什么成果。...

           我觉得接触一门新的编程语言的时候第一个程序的编写至关重要,这能够让我快速了解到简单的语法以及运行方法。而运行方法基本上是我更为关注的,因为这将是后期学习过程中不断打交道的东西。

           为了能够弥补工作中那种浪费时间的懊悔感,我决定学习一个新的编程语言,初步选定了lisp。倒是没有特别的因由,只是随便想到了就选择了。这个纯粹是一种赎罪式消磨时间的学习,倒也不期望自己能够学到什么成果。倒是学习过程中可以顺便练习使用一下Emacs,这个是一个很有趣的事情。

           接下来写自己的第一个程序,我个人感觉比较有代表性的一段代码:

    (defun WriteHelloWorld(fileName)

     (with-open-file (out fileName

                         :direction :output

                         :if-exists :supersede)

    (with-standard-io-syntax (print "HelloWorld" out))))

           打开lispbox加载并执行如下:

           执行的过程中屏幕显示出“Hello World”,这个其实是有点在我意料之外。我最初对代码的理解是这个函数完成一个写文件的功能。接下来看看写文件的结果吧!查看LispBox启动位置,发现多了一个demo.txt的文件,打开后文件的内容如下:

           有一个空行的输出,还是有些让我意外。不过,目前我比较关注的如何运行的问题暂且是解决了。应该还会有更加简单的运行方法,后面继续了解学习吧!

    展开全文
  • Lisp源码200例

    2015-01-11 20:51:28
    Lisp源码200例,角度阵列程序,创建并插入匿名块,测量两线夹角,按给定比例建立尺寸标注样式程序,初始化绘图环境
  • lisp 在编程江湖一直神秘存在,高手都知道他是神器,却因为他的工具缺乏,教程难懂,而没有普及,但是他真的是神器,下面我说几个问题,你可以好好思考一下。 你是否在编程的是否非常苦恼 复制--粘贴 这件事情?你...

    lisp 在编程江湖一直神秘存在,高手都知道他是神器,却因为他的工具缺乏,教程难懂,而没有普及,但是他真的是神器,下面我说几个问题,你可以好好思考一下。

    你是否在编程的是否非常苦恼 复制--粘贴 这件事情?你是否苦恼代码太长了,重复太多了?

    你是否苦恼java这种语言怎么这么啰嗦?如果要能简短表达就好了!!

    是否苦恼过nodejs那种异步编程很不符合思维习惯?

     

    lisp有宏,他能让你自定义操作符,也就是,自定义编程语言了,就是你可以自由的扩展了当前语言的表达能力,让那些该死的重复的代码或者别扭的表达按照你的意愿成为现实!!

    lisp的这种特性,源于他的代码和数据结果是完全一致的,他的代码是数据也可以是代码,所以他可以自由的扩展语言表达能力和代码的边界。

    一个程序 =   数据+代码表达+语言表达能力 

    但是lisp可以自由定义语言表达能力,所以,结果是  ,一个lisp程序   =  数据+ 简短的代码表达 +  扩展后的语言表达能力。

    lisp让你的语言和代码之间进行一个边界的动态调整,语言越强大了,代码就越少了,这就是他功效。

    lisp不是在编写一般的程序,而是在编写自己的专用语言,我想如果你是一个优秀的程序员,你必然应该明白,如果用自己编写的语言去编写程序的话,是多么的happy的一个事情,真他妈的激动人心!

    展开全文
  • lisp-列表

    2019-12-10 10:25:56
    cons (cons 1 nil) 列表可以当作是链表,其中的每个节点node包含了两个指针 car:节点的值 cdr:下一个节点 cons的操作,可以理解为在一个链表的基础上,前插一个值。 (cons 1 nil);...(cons '(...
  • Lisp神化之路

    万次阅读 2018-10-23 18:01:31
    程序员在谈论不同编程语言的相对优劣时,其口吻就像是在说别在工具腰带上的不同工具——这个适合系统编程,另...要是有人胆敢声称某些语言优于其他语言,键盘侠们定然会开始攻击,如果说的是Lisp那就不同了。Lisp超...
  • 面向对象之父Alan Kay对“Lisp是有史以来最牛的编程语言”进行了解答。原回答如下:  Alan Kay:首先对我以前的一些答案进行澄清。有些人要尝试着用Lisp做操作系统,这看上去好像很难。事实上,我曾经做过最好的...
  • Lisp:AutoLisp入门、操作编程实例详细攻略 目录 AutoLisp入门 1、图文教程 AutoLisp操作 AutoLisp入门 AutoLISP是由Autodesk公司开发的一种LISP程序语言,LISP是List Processor的缩写。通过auto...
  • 第2篇(第11章)为62个精选实用autolisp程序设计范例,通过精讲62个autolisp程序设计范例,让读者将autolisp知识融会贯通。第3篇(第12~21章)为autolisp与dcl对话框整合应用,主要介绍了dcl的基础知识、dcl对象属性的...
  • AutoLisp学习笔记

    万次阅读 多人点赞 2014-07-10 16:28:34
    【前言】 最近接到AutoCAD开发的项目,对于我这种0基础无人带的菜鸟来说,真是个棘手的事。经过十几天的揣摩学习,研究了好几本书,现在总结一下,以备后来...掌握AutoLISP开发,需要准备如下知识:1、LISP语言 2.Aut
  • 《autocad完全应用指南-autolisp+dcl+visual lisp程序设计篇》重点讲解autolisp、dcl、visual lisp三合一的autocad二次程序开发技术。《autocad完全应用指南.autolisp+dcl+visual lisp程序设计篇》分为4篇,共35章。...
  • 这个是偶用AutoLisp程序写的,当时是为解决提前AutoCAD图中的N个点的坐标值,并保存在文件中。 这里说说具体怎么使用: 1.以记事本打开本文件,修改第7行和第8行的保存文件的路径和文件名。 2.加载到AutoCAD中: ...
  • 全面的AutoLISP和Visual_LISP教程
  • autolisp常用函数表

    2019-02-12 21:20:38
    autolisp常用函数表
  • AutoLisp新手必备

    2018-05-30 17:03:09
    autolisp新手入门学习资料,能够快速而不繁杂的掌握入门知识点。
  • autolisp开发人员手册

    2012-03-23 11:02:25
    autocad 二次开发 pdf autolisp开发人员手册
  • AutoLISP编程实例.pdf

    2015-12-08 23:32:14
    采用LISP语言进行CAD二次开发编程案例,通俗易懂。
  • AutoLisp 简要笔记

    千次阅读 2017-12-18 16:47:57
    Virtual Lisp为了便于 autolisp 的开发调试,autodesk 公司推出了 Virtual Lisp 集成开发环境。在 CAD 命令行输入 vlide 或者 vlisp 即可调出IDE。 CAD 设置 修改支持文件搜索路径,添加自己的脚本文件路径 加载...
  • AutoLisp入门教程

    2017-12-11 20:35:33
    AutoLisp入门教程 lisp语言很好的入门教材 lisp语法定义比较全面
  • AutoLisp葵花宝典.chm

    2014-01-08 22:36:13
    这是非常适合AutoLisp初学者的一份教材,高手就不必下了。
  • AutoLisp函数

    千次阅读 2005-01-05 22:04:00
    AutoLisp函数一、数学运算功能函数 1.l(十 数值 数值…)返回:累计实数或整数数值 1.2(一 数值 数值…)返回:差值 1.3(* 数值 数值…)返回:所有数值乘积 1.4(/ 数值 数值…)返回:第一个数值...
  • AutoLISP是由Autodesk公司开发的一种LISP程序语言,LISP是List Processor的缩写。通过autolisp编程,可以节省工程师很多时间。AutoLISP语言作为嵌入在AutoCAD内部的具有智能特点的编程语言,是开发应用AutoCAD不可...
  • 第2篇(第11章)为62个精选实用autolisp程序设计范例,通过精讲62个autolisp程序设计范例,让读者将autolisp知识融会贯通。第3篇(第12~21章)为autolisp与dcl对话框整合应用,主要介绍了dcl的基础知识、dcl对象属性的...
  • AutoLISP&DCL基础篇

    2014-12-12 13:46:27
    很经典的教材,AutoLISP领域最权威的教材~
  • AutoLISP中文版函数参考,cad二次开发的必需品。
  • AUTOLISP基础教程

    2019-03-22 22:11:33
    会CAD的很多不会编程,会编程的很多不会CAD,这本书会教我们学习如何CAD编程,让编程来提高CAD画图的效率
  • AUTOCAD完全应用指南 AUTOLISP+DCL+VISUAL LISP程序设计篇(书籍+光盘)
  • AUTOLISP@DCL基础篇(全

    2013-06-11 17:29:46
    Autolisp编程学习资料,铁道出版社,非常好的书籍。
  • autocad自制纯autolisp绘图插件,兼容autocad for mac。 加载main.fas,输入hh查询命令。

空空如也

1 2 3 4 5 ... 20
收藏数 50,411
精华内容 20,164
关键字:

lisp