zoukankan      html  css  js  c++  java
  • Common lisp 学习笔记

         知道lisp这一门语言,应该是半年前的事了,FreeBSD技术交流群的董老师,一直群里宣扬lisp, 说lisp是MIT计算系学生必修课程,并且他本人也一直在学习。有一天,他将国内lisp界的代表人物—伞哥的blog发到群里,我花了几个小时,认真将他博客文章几乎都看完,一是觉得伞哥此人是一个很有意思的人,二是lisp应该是一种比较有趣的语言。于是乎,我慢慢开始关注lisp语言了

    首先,lisp这个理论,是1958年,美国的约翰.麦肯锡提出来的,最早只是以论文的形式存在,并没有形成真正的编程语言,随着计算机科学的发展,其才慢慢的成为了编程语言。现在的lisp的方言有许多种,也即是许多不同的实现方式。其中最著名的莫过于common lisp和scheme. 其它的,我也不了解.

    Lisp是List processer,也就是链式处理的简称,那么在lisp中,它基本的数据结构只有两种,原子和列表(atom and list ),其它的结构,可以通过列表来达到.

    原子: 数字(整形,浮点型,复数等),字符,字符串,

    clip_image002

    列表: (list 1 3 4 67 ) 或是’( 1 3 5 78 )

    clip_image004

    使用列表做为列表的成员

    clip_image006

    使用字符串作为列表的成员

    clip_image008

    使用已经绑定了值的符号作为列表的成员

    clip_image010

    使用标准宏的结果作为列表成员

    clip_image012

    宏:lisp中的宏和C语言的宏,名字虽然是相同的,但其功能与用法,与C语言有很大的区别

    如dolist宏,它的作用是将列表中的元素,依次绑定到一个变量当中,最后输出一个nil

    clip_image014

    dolist的另一个作用,把解引用中的所有元素依次绑定到指定的变量

    clip_image016

    Cons的作用,对两个变量进行操作,变量可能是符号,或是列表

    clip_image018

    Cdr,取列表变量从第二个元素到最后一个元素

    clip_image020

    Car取列表(或是解引用)的第一个元素

    clip_image022

    Let 用法

    (let

    ((var1 value)

    (var2 value))

    body)

    clip_image024

    在上图中

    ((a 10 ) (b 10)) 将a和b的变量都绑定为10, 程序主体 (print ( + a b) )

    函数的返回值为print的返回值

    Common lisp相关运算

    clip_image026

    Common lisp的运算符和其它的编程语言不太一样,它是将运算符放在第一位,如在我们的C语言中,运算符一般是放在两变量中间,

    ( + 10 20) 两数相加

    ( - 20 10 ) 两数相减

    ( * 20 10) 两数相乘

    ( / 20 10) 两数相除

    (mod 4 3 ) 两数相除取余数

    (sqrt 4) 其值为2,取一个数的开平方

    ………………….

    在common lisp中,不是采用在其它编程语言中常见的{}大括号进行语句块整合,而是采用()小括号的方式来进行整合

    同时,也有它自己的编程风格

    Common lisp表达式

    If then else语句

    clip_image028

    上语句的意思,当a大于b时,打印a,否则打印b

    Do 宏

    clip_image030

    (i 0) 绑定i的初始值为0, ( + 1 i)

    (( > = i 4) 循环中止条件

    (print I ) 程序

  • 相关阅读:
    vue a标签下载图片文档显示下载失败
    20200331
    拿奖不排队——项目系统设计与数据库设计
    重修信息管理系统——需求说明书
    拿奖不排队--项目需求分析
    《重修信息系统》项目需求分析模型
    2020软件工程作业--团队02
    拿奖不排队 ——团队展示
    PHP POST请求同时获取结果和header信息
    Peer reports incompatible or unsupported protocol version.
  • 原文地址:https://www.cnblogs.com/gentoofly/p/2808828.html
Copyright © 2011-2022 走看看