首页 > 其他分享 >计算物理基础【6】

计算物理基础【6】

时间:2024-11-11 20:46:52浏览次数:3  
标签:返回 字符 函数 Lisp 基础 char 大小写 计算 物理

文章目录

lisp

lisp数字

在Lisp中处理数字主要涉及数值操作、数据类型识别以及一些与数学相关的函数。Lisp支持整数、浮点数、复数等多种数据类型,并且提供了许多内置的数学函数,适合在数值计算或数学运算中使用。下面是Lisp中一些与数字相关的操作和函数:

1. 数字类型

Lisp的数值类型包括:

  • 整数 (Integer):如1-10
  • 浮点数 (Float):如3.14-0.5
  • 复数 (Complex):如#C(2 3)表示2+3i

2. 基本数值操作

Lisp支持一些基本的数学运算,如加法、减法、乘法、除法等。

(+ 1 2 3)       ; 加法,返回 6
(- 5 2)         ; 减法,返回 3
(* 4 3)         ; 乘法,返回 12
(/ 10 2)        ; 除法,返回 5

3. 常用数学函数

Lisp提供了许多常用的数学函数:

  • abs:求绝对值

    (abs -10)      ; 返回 10
    
  • expt:求幂

    (expt 2 3)     ; 返回 8,即2的3次幂
    
  • sqrt:求平方根

    (sqrt 9)       ; 返回 3.0
    
  • mod:取模(余数)

    (mod 10 3)     ; 返回 1
    
  • roundfloorceilingtruncate:取整函数

    (round 2.6)    ; 返回 3
    (floor 2.6)    ; 返回 2
    (ceiling 2.6)  ; 返回 3
    (truncate 2.6) ; 返回 2
    

4. 比较运算

Lisp提供了数值比较运算符:

  • =:判断是否相等
  • /=:判断是否不相等
  • <<=>>=:比较大小
(= 3 3)         ; 返回 T
(/= 3 4)        ; 返回 T
(< 2 5)         ; 返回 T
(> 5 2)         ; 返回 T

5. 检查数字类型

Lisp中可以使用以下函数来检查变量的数值类型:

  • integerp:检查是否为整数
  • floatp:检查是否为浮点数
  • numberp:检查是否为数字
  • complexp:检查是否为复数
(integerp 5)    ; 返回 T
(floatp 3.14)   ; 返回 T
(numberp 2)     ; 返回 T
(complexp #C(2 3)) ; 返回 T

6. 复数操作

Lisp支持复数的创建与操作,可以使用make-complex来创建复数,也可以使用realpartimagpart来提取实部和虚部。

(setq z (make-complex 2 3)) ; 创建复数2+3i
(realpart z)                ; 返回 2
(imagpart z)                ; 返回 3

示例:阶乘函数

一个简单的阶乘函数示例:

(defun factorial (n)
  (if (<= n 1)
      1
      (* n (factorial (- n 1)))))

以上函数实现了阶乘计算,递归地计算n!

在Lisp中,字面数值(literal numbers)

是指直接写在代码中的数字。Lisp支持多种字面数值的表示方法,包括整数、浮点数、复数、分数等。

1. 整数

整数是最基本的数值类型,可以直接书写为正数或负数。例如:

42     ; 正整数
-7     ; 负整数
0      ; 零

2. 浮点数

浮点数用于表示带有小数点的数值,通常以小数点的形式或科学记数法表示。例如:

3.14        ; 小数形式
-0.5        ; 负浮点数
6.022e23    ; 科学记数法,表示6.022×10^23

3. 分数

在Lisp中,可以使用分数来表示有理数,分数使用分子/分母的形式表示。例如:

3/4     ; 表示3/4
-7/2    ; 表示-7/2

Lisp中的分数会自动化简。例如,6/8会被简化为3/4

4. 复数

复数是由实部和虚部组成的数,在Lisp中可以通过#C(实部 虚部)表示。例如:

#C(2 3)     ; 表示复数2 + 3i
#C(-1 0.5)  ; 表示复数-1 + 0.5i

Lisp支持对复数进行操作,例如加、减、乘、除等。

5. 进制表示

Lisp支持多种进制的整数表示。可以通过前缀来指定数值的进制:

  • #b:二进制(binary)
  • #o:八进制(octal)
  • #x:十六进制(hexadecimal)
  • #d:十进制(decimal,默认)

例如:

#b1010    ; 二进制,等于10
#o12      ; 八进制,等于10
#xA       ; 十六进制,等于10
#d10      ; 十进制

6. 特殊常数

Lisp还支持一些数学常数:

  • pi:圆周率,约等于3.14159
  • most-positive-fixnum:最大整数
  • most-negative-fixnum:最小整数

例如:

pi                   ; 圆周率
most-positive-fixnum ; 最大整数
most-negative-fixnum ; 最小整数

示例代码

以下是一些包含不同类型字面数值的示例代码:

(+ 42 3.14 -7)                ; 加法操作,整数和浮点数相加
(* 3/4 2)                     ; 分数运算,返回3/2
(realpart #C(2 3))            ; 获取复数的实部,返回2
(imagpart #C(2 3))            ; 获取复数的虚部,返回3

这些字面数值表示法可以帮助在Lisp中精确地表达不同的数值类型,并且简化了代码书写和数值操作。

在Lisp中,运算符

通常是以前缀表达式的形式调用的,运算符写在前面,后跟操作数。Lisp提供了多种内置的数学运算和逻辑运算支持。

1. 数学运算

加法

可以对两个或多个数字进行加法运算。

(+ 2 3)         ; 返回 5
(+ 1 2 3 4)     ; 返回 10
减法

减法操作可以减去一个或多个数。

(- 5 3)         ; 返回 2
(- 10 2 3)      ; 返回 5 (等同于 10 - 2 - 3)
乘法

乘法可以对多个数字进行运算。

(* 2 3)         ; 返回 6
(* 2 3 4)       ; 返回 24
除法

除法用于对多个数字进行除法操作,返回浮点数结果。

(/ 10 2)        ; 返回 5.0
(/ 20 2 2)      ; 返回 5.0 (等同于 20 / 2 / 2)
求余和模

Lisp提供了modrem函数来计算除法的余数。

  • mod:取模运算,结果与除数符号一致。
  • rem:求余运算,结果与被除数符号一致。
(mod 10 3)      ; 返回 1
(rem 10 3)      ; 返回 1
(mod -10 3)     ; 返回 2
(rem -10 3)     ; 返回 -1
求幂

expt函数用于计算幂。

(expt 2 3)      ; 返回 8 (即2的3次幂)
求平方根

sqrt函数用于计算平方根。

(sqrt 9)        ; 返回 3.0

2. 比较运算

Lisp的比较运算符包括=<<=>>=/=,可以对数字进行比较。

(= 3 3)         ; 返回 T
(< 2 5)         ; 返回 T
(> 5 2)         ; 返回 T
(/= 3 4)        ; 返回 T (表示不等)

3. 逻辑运算

Lisp提供了常用的逻辑运算符,包括andornot

  • and:如果所有参数都是真值,则返回最后一个真值,否则返回NIL
  • or:如果有任何参数是真值,则返回第一个真值,否则返回NIL
  • not:取反,如果参数为NIL,则返回T,否则返回NIL
(and T T)           ; 返回 T
(and T NIL)         ; 返回 NIL
(or NIL T)          ; 返回 T
(not T)             ; 返回 NIL
(not NIL)           ; 返回 T

4. 常用的数学函数

Lisp还提供了一些实用的数学函数,例如absmaxmin等:

  • abs:求绝对值。
  • max:求最大值。
  • min:求最小值。
(abs -10)           ; 返回 10
(max 1 2 3)         ; 返回 3
(min 1 2 3)         ; 返回 1

5. 复数运算

Lisp支持复数运算,可以直接进行加减乘除,并且提供了realpartimagpart来提取复数的实部和虚部。

(setq z1 #C(2 3))           ; 定义复数 z1 = 2 + 3i
(setq z2 #C(1 -1))          ; 定义复数 z2 = 1 - i

(+ z1 z2)                   ; 返回 #C(3 2)
(- z1 z2)                   ; 返回 #C(1 4)
(* z1 z2)                   ; 返回 #C(5 1)
(/ z1 z2)                   ; 返回 #C(-0.5 2.5)

(realpart z1)               ; 返回 2
(imagpart z1)               ; 返回 3

6. 条件判断

可以使用ifcond来进行条件判断。

if表达式

if用于简单的二分判断。

(if (> 3 2)
    'yes
    'no)                     ; 返回 'yes
cond表达式

cond用于多条件判断,类似于多个if-else

(cond
  ((> 3 5) 'greater)
  ((< 3 5) 'less)
  (T 'equal))                ; 返回 'less

示例:阶乘函数

下面是用Lisp实现的一个递归阶乘函数,示例中也展示了运算的灵活性:

(defun factorial (n)
  (if (<= n 1)
      1
      (* n (factorial (- n 1)))))

总结

Lisp的运算方式简洁且灵活,通过这些基本运算符,可以方便地进行各种数学和逻辑运算。

在Lisp中,数值比较操作符

用于对数值进行大小、等值、不等值的比较。以下是Lisp中常用的数值比较函数及其用法。

1. 相等比较

  • =:用于判断数值是否相等。只适用于数值类型。
  • /=:用于判断数值是否不相等。如果任意两个数值不等,返回T
(= 3 3)           ; 返回 T,表示 3 等于 3
(= 3 4)           ; 返回 NIL,表示 3 不等于 4
(/= 3 4)          ; 返回 T,表示 3 不等于 4
(/= 3 3 3)        ; 返回 NIL,所有数值相等

2. 大小比较

  • <:判断第一个数是否小于第二个数。
  • <=:判断第一个数是否小于或等于第二个数。
  • >:判断第一个数是否大于第二个数。
  • >=:判断第一个数是否大于或等于第二个数。

可以连续比较多个数值,当所有条件成立时,返回T

(< 2 3)           ; 返回 T,表示 2 小于 3
(<= 2 2)          ; 返回 T,表示 2 小于或等于 2
(> 5 3)           ; 返回 T,表示 5 大于 3
(>= 5 5)          ; 返回 T,表示 5 大于或等于 5

(< 1 2 3)         ; 返回 T,表示 1 < 2 < 3
(> 3 2 1)         ; 返回 T,表示 3 > 2 > 1
(<= 1 2 2 3)      ; 返回 T,表示 1 <= 2 <= 2 <= 3

3. 综合示例:比较函数

可以用这些比较操作符定义函数来实现逻辑判断,例如编写一个函数来比较两个数的大小。

(defun compare (a b)
  (cond
    ((= a b) "Equal")
    ((< a b) "Less than")
    ((> a b) "Greater than")))

调用示例:

(compare 3 5)    ; 返回 "Less than"
(compare 5 3)    ; 返回 "Greater than"
(compare 4 4)    ; 返回 "Equal"

4. 数值比较的特殊情况

在比较中,如果操作数包含复数,则需要分开比较复数的实部和虚部,因为Lisp的这些数值比较操作符并不直接支持复数。

在Lisp中,字符

是基础数据类型之一,用于表示单个字符。字符常常用于字符串处理或特定的字符判断操作。字符在Lisp中通常使用单引号#\开头的形式来表示。例如,字符A表示为#\A

1. 字符表示

Lisp中的字符可以使用#\前缀来表示:

#\A       ; 表示字符 A
#\a       ; 表示字符 a(与大写不同)
#\Space   ; 表示空格字符
#\Tab     ; 表示制表符
#\Newline ; 表示换行符

2. 字符操作函数

Lisp提供了许多函数来处理和比较字符。

字符比较
  • char=:判断两个字符是否相等。
  • char<:判断第一个字符是否小于第二个字符。
  • char<=:判断第一个字符是否小于或等于第二个字符。
  • char>:判断第一个字符是否大于第二个字符。
  • char>=:判断第一个字符是否大于或等于第二个字符。
(char= #\A #\A)         ; 返回 T
(char< #\A #\B)         ; 返回 T
(char> #\B #\A)         ; 返回 T
(char<= #\A #\B)        ; 返回 T
(char>= #\B #\A)        ; 返回 T
不区分大小写的字符比较

对于不区分大小写的字符比较,可以使用char-equalchar-lessp等函数。

  • char-equal:判断两个字符是否相等,不区分大小写。
  • char-lessp:判断第一个字符是否小于第二个字符,不区分大小写。
  • char-greaterp:判断第一个字符是否大于第二个字符,不区分大小写。
(char-equal #\A #\a)      ; 返回 T
(char-lessp #\a #\B)      ; 返回 T
(char-greaterp #\B #\a)   ; 返回 T

3. 字符转换

Lisp中可以使用以下函数来转换字符的大小写:

  • char-upcase:将字符转换为大写。
  • char-downcase:将字符转换为小写。
(char-upcase #\a)        ; 返回 #\A
(char-downcase #\A)      ; 返回 #\a

4. 字符判断

Lisp提供了几个判断字符类型的函数:

  • alpha-char-p:判断字符是否为字母。
  • digit-char-p:判断字符是否为数字字符,返回对应的数字。
  • alphanumericp:判断字符是否为字母或数字。
  • upper-case-p:判断字符是否为大写字母。
  • lower-case-p:判断字符是否为小写字母。
(alpha-char-p #\A)       ; 返回 T
(digit-char-p #\3)       ; 返回 3
(alphanumericp #\B)      ; 返回 T
(upper-case-p #\A)       ; 返回 T
(lower-case-p #\a)       ; 返回 T

5. 生成字符

可以使用code-char将整数转为字符,或者使用char-code将字符转为对应的整数编码。

(char-code #\A)          ; 返回 65,字符 A 的 ASCII 编码
(code-char 65)           ; 返回 #\A,将编码 65 转为字符

6. 示例:检查字符类型

下面是一个示例函数,用于检查给定字符的类型。

(defun check-char-type (ch)
  (cond
    ((alpha-char-p ch) "Alphabet")
    ((digit-char-p ch) "Digit")
    ((alphanumericp ch) "Alphanumeric")
    ((upper-case-p ch) "Uppercase")
    ((lower-case-p ch) "Lowercase")
    (T "Other")))

调用示例:

(check-char-type #\A)   ; 返回 "Alphabet"
(check-char-type #\3)   ; 返回 "Digit"

总结

在Lisp中,字符是一种重要的数据类型,许多函数支持对字符进行比较、转换、类型判断等操作。这些函数使得字符处理更加便捷和灵活。

字符比较

在Lisp中,字符比较操作主要用于比较两个字符的大小、相等性等。Lisp提供了区分大小写和不区分大小写的比较操作符,常用的字符比较函数有以下几种:

1. 区分大小写的字符比较

  • char=:判断两个字符是否相等,区分大小写。
  • char<:判断第一个字符是否小于第二个字符,按字符编码排序,区分大小写。
  • char<=:判断第一个字符是否小于或等于第二个字符。
  • char>:判断第一个字符是否大于第二个字符。
  • char>=:判断第一个字符是否大于或等于第二个字符。

这些函数在比较字符时,会根据字符的ASCII(或Unicode)编码来判断大小。

(char= #\A #\A)         ; 返回 T,表示字符相等
(char= #\A #\a)         ; 返回 NIL,A 不等于 a(区分大小写)
(char< #\A #\B)         ; 返回 T,A 的编码小于 B
(char> #\B #\A)         ; 返回 T,B 的编码大于 A
(char<= #\A #\A)        ; 返回 T,A 小于或等于 A
(char>= #\B #\A)        ; 返回 T,B 大于或等于 A

2. 不区分大小写的字符比较

Lisp还提供了不区分大小写的字符比较函数。这些函数在比较字符时,会自动将字符转换为相同的大小写进行比较。

  • char-equal:判断两个字符是否相等,不区分大小写。
  • char-lessp:判断第一个字符是否小于第二个字符,不区分大小写。
  • char-not-greaterp:判断第一个字符是否小于或等于第二个字符,不区分大小写。
  • char-greaterp:判断第一个字符是否大于第二个字符,不区分大小写。
  • char-not-lessp:判断第一个字符是否大于或等于第二个字符,不区分大小写。
(char-equal #\A #\a)      ; 返回 T,不区分大小写,A 等于 a
(char-lessp #\a #\B)      ; 返回 T,不区分大小写,a 小于 B
(char-greaterp #\B #\a)   ; 返回 T,不区分大小写,B 大于 a
(char-not-greaterp #\a #\A) ; 返回 T,不区分大小写,a 等于 A
(char-not-lessp #\B #\b)    ; 返回 T,不区分大小写,B 等于 b

3. 示例:比较函数

下面是一个使用字符比较函数的示例代码,它检查两个字符的关系,并返回相应的信息。

(defun compare-chars (ch1 ch2)
  (cond
    ((char-equal ch1 ch2) "Characters are equal (case-insensitive)")
    ((char< ch1 ch2) "First character is less than second (case-sensitive)")
    ((char> ch1 ch2) "First character is greater than second (case-sensitive)")
    ((char-lessp ch1 ch2) "First character is less than second (case-insensitive)")
    ((char-greaterp ch1 ch2) "First character is greater than second (case-insensitive)")
    (t "Characters are different")))

调用示例:

(compare-chars #\A #\a)   ; 返回 "Characters are equal (case-insensitive)"
(compare-chars #\A #\B)   ; 返回 "First character is less than second (case-sensitive)"

4. 应用场景

字符比较可以用于排序、文本处理、字符匹配等操作。通过区分大小写和不区分大小写的比较,可以灵活应对不同的场景需求。

参考文献

  1. chatgpt

标签:返回,字符,函数,Lisp,基础,char,大小写,计算,物理
From: https://blog.csdn.net/sakura_sea/article/details/143693652

相关文章

  • 计算物理基础【7】
    文章目录sas在SAS(StatisticalAnalysisSystem)软件中,“库”(Library)1.什么是SAS库2.创建SAS库3.SAS库的类型4.使用SAS库中的数据集5.删除SAS库6.示例:访问和操作SAS库7.总结在SAS中,日志(Log)窗口1.日志窗口的内容2.查看SAS日志窗口3.常见的日志信息正常的执行日志......
  • 现代IT基础设施管理(1):Terraform初识和小试牛刀
    基础设施包括各种云,像国内的阿里云、腾讯云和华为云,国外的AWS、微软Azure云和谷歌云,还有Kubernetes和OpenStack,都可以用Terraform进行资源管理。使用基础设施即代码(InfrastructureasCode,IaC)的方式来管理基础设施,这是现代IT基础设施管理的一个重要趋势,它允许我们以代码的形式定......
  • 一个实用的脚本 [Bash 数组基础]
     ###Bash数组基础在Bash中,数组是一种可以存储多个值的数据结构。数组的每个元素都有一个索引,从0开始。例如,假设我们有一个数组:```bashtask_ids=("task1""task2""task3")```###获取数组的所有索引`${!task_ids[@]}`语法用于获取数组`task_ids`的所有索引。具体......
  • 深入计算机语言之C++:STL之string的认识与使用
    ......
  • Linux硬盘挂载与磁盘分区基础(一)(主分区、拓展分区、逻辑分区)
      我们常用windows时,会区分C盘、D盘之类的(A、B盘是软盘)就是所谓的分区,这么做为了方便数据管理,比如扩容之类的。  本文采用Linux(Ubuntu20.04)来介绍分区,其它Linux系统基本一样的。  首先,我们需要熟悉几个概念:  硬盘:存储数据用的硬件,比如移动硬盘、固态硬盘、U盘等,有了硬......
  • 数学与统计计算:Python math 与 statistics库基础教程
    数学与统计计算:Pythonmath与statistics库基础教程在数据分析、机器学习和科学计算中,数学和统计学是两个至关重要的基础。Python提供了强大的内置库math和statistics,可以帮助我们快速、方便地完成常见的数学和统计计算。本篇博客将介绍math和statistics库中的基......
  • 【SpringMVC】基础入门实战(3)
     阿华代码,不是逆风,就是我疯你们的点赞收藏是我前进最大的动力!!希望本文内容能够帮助到你!!目录一:实践1:获取header(1)普通方法 (2)简洁方法获取Header2:返回静态页面(1)返回静态页面失败(2)Controller(3)@RestController和@Controller关联3:返回数据@ResponseBody4:返回HTM......
  • 2024年全国高校计算机能力挑战赛C语言计算机能力挑战赛赛前模拟
    2024年全国高校计算机能力挑战赛C语言计算机能力挑战赛赛前模拟18拉手游戏某个班级共n(2<n<100)人玩报数游戏,同学们最初手拉手围成一圈。小明最开始站在第m(0<m<n)个位置,现在从圈内第一个位置开始报数,但凡报到3就退出圈子,问小明是第几个退出圈子的人?输入格式:一行输入两个......
  • (水下)目标检测/深度学习/计算机视觉国内外知名课题组
    大方向:目标检测、深度学习、计算机视觉国内课题组:1、港中文MMdetection课题组-号称计算机视觉界的黄埔军校香港中文大学的MMDetection课题组是隶属于香港中文大学多媒体实验室(multimedialaboratory,theChineseUniversityofHongKong)的一个重要研究团队。该多媒体实验......
  • 部署神经网络时计算图的优化方法
    部署神经网络时计算图的优化方法部署神经网络时,各路框架基本都会把神经网络的计算建模为一个(有向无环的)计算图,之后再对这个计算图进行优化,包括硬件相关的优化和硬件无关的优化。本文介绍几种部署神经网络时计算图的优化方法,帮助读者在部署神经网络时理解部署工具都干了些什......