LISP - 运算符

运算符是一个符号,它告诉编译器执行特定的数学或逻辑操作。 LISP允许在众多的数据业务,通过各种函数,宏和其他结构的支持。

允许对数据的操作都可以归类为:

算术运算

比较操作

逻辑运算

位运算

算术运算

下表列出了所有支持的LISP算术运算符。假设变量A=10和变量B=20则:

运算符

描述

Example

+

增加了两个操作数

(+ A B) = 30

-

从第一数减去第二个操作数

(- A B)= -10

*

乘两个操作数

(* A B) = 200

/

通过取消分子除以分子

(/ B A) = 2

mod,rem

模运算符和其余整数除法后

(mod B A ) = 0

incf

递增运算符,所指定的第二个参数增加整数值

(incf A 3) = 13

decf

递减操作符,通过指定的第二个参数减小整数值

(decf A 4) = 9

例子

创建一个名为main.lisp一个新的源代码文件,并在其中输入如下代码:

(setq a 10)

(setq b 20)

(format t "~% A + B = ~d" (+ a b))

(format t "~% A - B = ~d" (- a b))

(format t "~% A x B = ~d" (* a b))

(format t "~% B / A = ~d" (/ b a))

(format t "~% Increment A by 3 = ~d" (incf a 3))

(format t "~% Decrement A by 4 = ~d" (decf a 4))

当您单击Execute按钮,或按下Ctrl+ E,LISP立即执行它,返回的结果是:

A + B = 30

A - B = -10

A x B = 200

B / A = 2

Increment A by 3 = 13

Decrement A by 4 = 9

比较操作

下表列出了所有支持的LISP关系运算符的数字之间进行比较。然而不像其他语言的关系运算符,LISP的比较操作符可能需要超过两个操作数,他们在只有数字工作。

假设变量A=10和变量B=20,则:

Operator

描述

Example

\=

检查如果操作数的值都相等与否,如果是的话那么条件为真。

(= A B)= true.

/=

检查如果操作数的值都不同,或没有,如果值不相等,则条件为真。

(/= A B) =true.

>

检查如果操作数的值单调递减。

(> A B) !=true.

<

检查如果操作数的值单调递增。

(< A B) = true.

>=

如有左操作数的值大于或等于下一个右操作数的值,如果是则条件检查为真。

(>= A B) !=true.

<=

如有左操作数的值小于或等于其右操作数的值,如果是,则条件检查为真。

(<= A B) = true.

max

它比较两个或多个参数,并返回最大值。

(max A B) 返回20

min

它比较两个或多个参数,并返回最小值。

(min A B) 返回 20

示例

创建一个名为main.lisp一个新的源代码文件,并在其中输入如下代码:

(setq a 10)

(setq b 20)

(format t "~% A = B is ~a" (= a b))

(format t "~% A /= B is ~a" (/= a b))

(format t "~% A > B is ~a" (> a b))

(format t "~% A < B is ~a" (< a b))

(format t "~% A >= B is ~a" (>= a b))

(format t "~% A <= B is ~a" (<= a b))

(format t "~% Max of A and B is ~d" (max a b))

(format t "~% Min of A and B is ~d" (min a b))

当您单击Execute按钮,或按下Ctrl+ E,LISP立即执行它,返回的结果是:

A \= B is NIL

A /= B is T

A \> B is NIL

A < B is T

A \>= B is NIL

A <= B is T Max of A and B is 20 Min of A and B is 10

布尔值逻辑操作

Common Lisp中提供了三种逻辑运算符:AND,OR,而不是运算符的布尔值。假定A=nil,B=5,那么

运算符

描述

示例

and

这需要任意数量的参数。该参数是从左向右计算。如果所有参数的计算结果为非零,那么最后一个参数的值返回。否则就返回nil。

(and A B) = NIL.

or

这需要任意数量的参数。该参数是从左向右计算的,直到一个计算结果为非零,则此情况下返回参数值,否则返回nil。

(or A B) = 5.

not

它接受一个参数,并返回t,如果参数的计算结果为nil。

(not A) = T.

示例

创建一个名为main.lisp一个新的源代码文件,并在其中输入如下代码:

(setq a 10)

(setq b 20)

(format t "~% A and B is ~a" (and a b))

(format t "~% A or B is ~a" (or a b))

(format t "~% not A is ~a" (not a))

(terpri)

(setq a nil)

(setq b 5)

(format t "~% A and B is ~a" (and a b))

(format t "~% A or B is ~a" (or a b))

(format t "~% not A is ~a" (not a))

(terpri)

(setq a nil)

(setq b 0)

(format t "~% A and B is ~a" (and a b))

(format t "~% A or B is ~a" (or a b))

(format t "~% not A is ~a" (not a))

(terpri)

(setq a 10)

(setq b 0)

(setq c 30)

(setq d 40)

(format t "~% Result of and operation on 10, 0, 30, 40 is ~a" (and a b c d))

(format t "~% Result of and operation on 10, 0, 30, 40 is ~a" (or a b c d))

(terpri)

(setq a 10)

(setq b 20)

(setq c nil)

(setq d 40)

(format t "~% Result of and operation on 10, 20, nil, 40 is ~a" (and a b c d))

(format t "~% Result of and operation on 10, 20, nil, 40 is ~a" (or a b c d))

当您单击Execute按钮,或按下Ctrl+ E,LISP立即执行它,返回的结果是:

A and B is 20 A or B is 10 not A is NIL

A and B is NIL

A or B is 5 not A is T

A and B is NIL

A or B is 0 not A is T

Result of and operation on 10, 0, 30, 40 is 40

Result of and operation on 10, 0, 30, 40 is 10

Result of and operation on 10, 20, nil, 40 is NIL

Result of and operation on 10, 20, nil, 40 is 10

请注意,逻辑运算工作,布尔值,其次,数字为零,NIL不是一样的。

对数位运算

位运算符位工作并进行逐位操作。对于按位与,或,和XOR运算的真值表如下:

p

q

p and q

p or q

p xor q

0

0

0

0

0

0

1

0

1

1

1

1

1

1

0

1

0

0

1

1

Assume if A = 60; and B = 13; now in binary format they will be as follows:

A = 0011 1100

B = 0000 1101

-----------------

A and B = 0000 1100

A or B = 0011 1101

A xor B = 0011 0001

not A = 1100 0011

通过LISP支持位运算符列于下表中。假设变量A=60和变量B=13,则:

操作符

描述

Example

logand

这将返回位逻辑的参数和。如果没有给出参数,则结果为-1,这是该操作的标识。

(logand a b)) = 12

logior

这将返回位逻辑包括它的参数或。如果没有给出参数,那么结果是零,这是该操作的标识。

(logior a b) = 61

logxor

这将返回其参数的按位逻辑异或。如果没有给出参数,那么结果是零,这是该操作的标识。

(logxor a b) = 49

lognor

这不返回的逐位它的参数。如果没有给出参数,则结果为-1,这是该操作的标识。

(lognor a b) = -62,

logeqv

这将返回其参数的逐位逻辑相等(也称为异或非)。如果没有给出参数,则结果为-1,这是该操作的标识。

(logeqv a b) = -50

示例

创建一个名为main.lisp一个新的源代码文件,并在其中输入如下代码:

(setq a 60)

(setq b 13)

(format t "~% BITWISE AND of a and b is ~a" (logand a b))

(format t "~% BITWISE INCLUSIVE OR of a and b is ~a" (logior a b))

(format t "~% BITWISE EXCLUSIVE OR of a and b is ~a" (logxor a b))

(format t "~% A NOT B is ~a" (lognor a b))

(format t "~% A EQUIVALANCE B is ~a" (logeqv a b))

(terpri)

(terpri)

(setq a 10)

(setq b 0)

(setq c 30)

(setq d 40)

(format t "~% Result of bitwise and operation on 10,0,30, 40 is ~a"(logand a b c d))

(format t "~% Result of bitwise or operation on 10,0,30, 40 is ~a"(logior a b c d))

(format t "~% Result of bitwise xor operation on 10,0,30, 40 is ~a"(logxor a b c d))

(format t "~% Result of bitwise eqivalance

operation on 10, 0, 30, 40 is ~a" (logeqv a b c d))

当您单击Execute按钮,或按下Ctrl+ E,LISP立即执行它,返回的结果是:

BITWISE AND of a and b is 12

BITWISE INCLUSIVE OR of a and b is 61

BITWISE EXCLUSIVE OR of a and b is 49

A NOT B is -62

A EQUIVALANCE B is -50

Result of bitwise and operation on 10, 0, 30, 40 is 0

Result of bitwise or operation on 10, 0, 30, 40 is 62

Result of bitwise xor operation on 10, 0, 30, 40 is 60

Result of bitwise eqivalance operation on 10, 0, 30, 40 is -61

木纹标识lisp_Lisp相关推荐

  1. 木纹标识lisp_lisp:关于标识符:原子和列表初步

    在任何的高级语言里面都需要标识符这么一个东西,从本质上来讲,标识符体现了数学中的方程的思想--对于计算机来说,标识符中所包含的数据是未知的,需要 从终端输入 的.因此他是个并不新鲜的东西,你只要编程就 ...

  2. 木纹标识lisp_LISP架构中一种新的移动性管理方案研究

    1 前 言 近年来,互联网在基础架构方面暴露出越来越多的问题,BGP路由表的增长问题更是被提入IETF工作日程.根据互联网结构委员会IAB(Internet Architecture Board)的报 ...

  3. 木纹标识lisp_lisp 习题 用列表元素标识文件一行。

    定义一个函数,接受一个文件名并返回一个由字串组成的列表,来表示文件里的每一行 CL-USER> (defun pseudo-cat (file) (with-open-file (str fil ...

  4. 木纹标识lisp_Lisp 中的 string 和 symbol 的区别?

    感觉大家都没说到点子上, 定义:Symbol(符号)只是用来指代能够引用其他数据类型的一种数据类型而已. 通常情况下,Symbol在read时读为符号(这个数据类型),然后在eval时(根据上下文)求 ...

  5. 木纹标识lisp_AutoLisp学习笔记:变量类型

    关于变量的几个概念: 1.符号 符号(SYMBOL)可以理解为标识,用来作为变量.函数的名字.它的命名规则是不能只含数字,可以由下列字符以外的任何可打印的字符所组成: "(".&q ...

  6. 木纹标识lisp_Visual-LISP程序设计(第2版)第6章调试程序.ppt

    ⑥ FILE(文件) 文件的检验窗口见图6-24.元素表内是该文件的名字和打开该文件时的属性.name指出了文件名,mode指出该文件是打开供读.写.附加,还是已被关闭,id是内部的文件标识,posi ...

  7. 木纹标识lisp_lisp_clojure.org

    Clojure学习笔记 Clojure是一门基于JVM的LISP方言, 为了LISP而学习. 在跟这篇文章起名的时候,考虑将其放在JAVA大类下, 不过一门语言最重要的应该是思想吧, 遂将其放在LIS ...

  8. 高精地图中导航标识识别

    高精地图中导航标识识别 思路 主要介绍高精地图导航标识识别上的技术演进,这些技术手段在不同时期服务了高精地图产线需求. 高精地图介绍 当你开车导航的时候,导航地图会向我们推荐一条或几条路线,有些地图甚 ...

  9. SQL Server中Identity标识列

    SQL Server中,经常会用到Identity标识列,这种自增长的字段操作起来的确是比较方便.但它有时还会带来一些麻烦. SQL Server中,经常会用到Identity标识列,这种自增长的字段 ...

最新文章

  1. 资源 | 25个机器学习面试题,期待你来解答
  2. ROS2学习(十三).ROS概念 - ROS结构(Composition)
  3. 和硕看重物联网大势 程建中:从擅长领域出发
  4. LeetCode 1048. 最长字符串链(哈希+DP)
  5. ListView(1)
  6. js实现搜索框智能提示上下移动效果
  7. 剑指offer(C++)-JZ24:反转链表(数据结构-链表)
  8. python 代码命令大全-Python 命令行参数
  9. 学习单片机入门需要准备什么?
  10. Confluence 6 LDAP 用户结构设置
  11. 路由端口的限制与破解
  12. 数据分析引擎之Kylin学习笔记
  13. 开调查公司创业,他的公司营业额达80万
  14. 无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装
  15. DELPHI关于汉字转拼音的一些想法
  16. MS Office 开发工具--VBA
  17. 游戏服务器 协议 安全问题,游戏服务器开发安全问题
  18. 全球大型电商测试基础架构设计概览
  19. cnn卷积神经网络手写体识别keras和tensorflow
  20. 免费下载Windows 7(申请序列号)

热门文章

  1. 人教版初中计算机教案全本,人教版初中信息技术教案全集
  2. ubuntu 14.04调试ORB-SLAM2
  3. stm32单片机里面的GPIO是什么意思?
  4. 【时间之外】浏览器分屏使用技巧
  5. 游戏设计的艺术和技术
  6. es查询简单场景问题小记
  7. IE 零日漏洞风险评估
  8. 微信小程序标题栏放logo 搜索框
  9. [附源码]Java计算机毕业设计SSM办公自动化系统
  10. 明日之后登录显示服务器连接中断,明日之后连接中断怎么办 无法登陆服务器解决方法...