posts - 5,comments - 0,views - 812

Lisp

Lisp发表于1960,是由数学家约翰·麦卡锡发明的。

在计算机有所发展时,数学家们对人工智能有着极大的兴趣,觉得可以实现一个共通的方法,使计算机能够处理链表中的符号数据,允许语言的处理、信息存入和检索、定理证明的过程机器化。

约翰·麦卡锡于1958年回到麻省理工,和Marvin Minsky组成了人工智能项目。开展一个表处理软件系统的工作,尔后推动了表处理语言LISP的诞生

lisp是世界上第二古老的程序语言,难以想象的是,这么多年过去了,它仍焕发生机,在人工智能上独具风骚。

安装

这里安装的是clisp,我的是Debain Linux

在Debian中:

sudo apt install clisp

 

在macOS中

使用 MacPorts
sudo port install clisp

或

使用 Homebrew
brew install clisp

 

在windows就上官网下载就好

函数式语言

LISP是函数式编程,所有的输入都被可以认为是函数(可以但不限于),函数就要有函数名,参数和表达式。

(+ 1 2)

3

就比如上面这个,‘+’是一个 加法函数,1和2成为了这个函数的参数,(加法函数由于是lisp自带的基本函数,所以它的表达式(或者说计算式)早以被定义好了,所以咱们并没有看到它的计算式是什么样的)

这样就构成了一个表达式。回车返回3。

基本格式:(它可以接受很多参数)

(函数名 参数1 参数2 ...)

lisp 函数式语言 处理的是列表

Lisp 的基本形式是 表,基本单元是表达式,就比如上面这个,它就是一个列表,它的表达式由 加法函数+、参数‘1’、‘2’组成。

lisp嘛,List Processing --> 列表处理.

具体以后再说。

 

它是函数语言的同时,也是交互式语言(就像python一样)

在命令行中输入 clisp

复制代码
$ clisp

  i i i i i i i       ooooo    o        ooooooo   ooooo   ooooo
  I I I I I I I      8     8   8           8     8     o  8    8
  I  \ `+' /  I      8         8           8     8        8    8
   \  `-+-'  /       8         8           8      ooooo   8oooo
    `-__|__-'        8         8           8           8  8
        |            8     o   8           8     o     8  8
  ------+------       ooooo    8oooooo  ooo8ooo   ooooo   8

Welcome to GNU CLISP 2.49.93+ (2018-02-18) <http://clisp.org/>

Copyright (c) Bruno Haible, Michael Stoll 1992-1993
Copyright (c) Bruno Haible, Marcus Daniels 1994-1997
Copyright (c) Bruno Haible, Pierpaolo Bernardi, Sam Steingold 1998
Copyright (c) Bruno Haible, Sam Steingold 1999-2000
Copyright (c) Sam Steingold, Bruno Haible 2001-2018

Type :h and hit Enter for context help.

[1]>
复制代码

 

你就可以像上面的 (+ 1 2)一样来试试,+  -  *  /

就比如

(/ 4 4 2 2)

结果发现什么?非常人性化的输出了1/4

当然还可以内嵌列表,如

[1]> (/ (- 4 7) (+ -1 6))
-3/5

求值

我们来理解一下表达式是如何被求值的。

在 Lisp 里, + 是函数,然而如 (+ 2 3) 的表达式,是函数调用。

当 Lisp 对函数调用求值时,它做下列两个步骤:

  1. 首先从左至右对实参求值。在这个例子当中,实参对自身求值,所以实参的值分别是 2 跟 3 。
  2. 实参的值传入以操作符命名的函数。在这个例子当中,将 2 跟 3 传给 + 函数,返回 5 。

如果实参本身是函数调用的话,上述规则同样适用。以下是当 (/ (+ 2 4) (- 2 7)) 表达式被求值时的情形:

  1. Lisp 对 (+ 2 4) 求值: 2求值为 2, 4 求值为 4 ,它们被传给函数 +,返回 6 。
  2. Lisp 对 (- 2 7) 求值: 2 求值为 2, 7求值为 7 ,它们被传给函数 - ,返回 -5 。
  3. 数值 6 与 -5 被传入函数 / ,返回 -6/5 。

但不是所有的 Common Lisp 操作符都是函数,不过大部分是。函数调用都是这么求值。由左至右对实参求值,将它们的数值传入函数,来返回整个表达式的值。这称为 Common Lisp 的求值规则。

posted on   iceshadow  阅读(276)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示