当前位置: 首页 > news >正文

Lisp 语言入门教程(一)

Lisp(“LISt Processing”)是一种古老而强大的编程语言,特别适合处理符号数据和列表。Lisp 是一种以括号和递归见长的语言,它启发了许多编程范式。以下是一个基础教程,帮助你快速了解 Lisp 的基本语法和功能。

1. 认识 Lisp 的基本特性

Lisp 的核心思想是“代码即数据,数据即代码”。在 Lisp 中,代码是由列表(list)构成的,而列表的本质是括号包裹的表达式。典型的 Lisp 表达式格式如下:

(操作符 参数1 参数2 ...)

例如,(+ 1 2) 表示“1 加 2”,相当于其他编程语言中的 1 + 2

2. Lisp 基础语法

(1) 数据类型

Lisp 支持多种数据类型,最常用的有:

  • 数字:整数、浮点数,如 423.14
  • 布尔值:Lisp 中 T 表示真,NIL 表示假
  • 符号(Symbol):用于变量和函数名,如 xmy-var
  • 字符串:如 "hello world"
  • 列表:Lisp 的核心数据结构,如 '(1 2 3)(list 1 2 3)
(2) 基本算术操作

Lisp 中提供了简单的算术运算,以下是几个例子:

(+ 1 2)      ; 加法,结果为 3
(- 5 3)      ; 减法,结果为 2
(* 2 3)      ; 乘法,结果为 6
(/ 10 2)     ; 除法,结果为 5
(3) 变量定义

使用 setq 来定义变量:

(setq x 10)    ; 将 x 赋值为 10
(setq y (+ x 5)) ; 将 y 赋值为 x + 5 的结果,即 15
(4) 条件判断

Lisp 中的条件语句使用 cond,类似于其他语言中的 if-else

(cond ((> x 0) "x is positive")((< x 0) "x is negative")(t "x is zero"))

其中 t 代表“默认情况”,即当没有其他条件满足时执行的分支。

3. 函数定义

Lisp 的函数定义使用 defun,格式如下:

(defun 函数名 (参数列表)函数体)

例如,定义一个简单的加法函数:

(defun add (a b)(+ a b))

调用该函数:

(add 2 3) ; 结果为 5

4. 列表操作

Lisp 中列表是非常重要的数据结构,以下是一些基本的列表操作函数:

  • car:获取列表的第一个元素
  • cdr:获取除第一个元素外的其他元素
  • cons:将一个元素添加到列表开头
  • list:创建一个新列表

示例:

(setq my-list '(1 2 3 4))
(car my-list)   ; 结果为 1
(cdr my-list)   ; 结果为 (2 3 4)
(cons 0 my-list) ; 结果为 (0 1 2 3 4)
(list 1 2 3)    ; 结果为 (1 2 3)

5. 递归

Lisp 中非常适合使用递归来处理问题。例如,实现一个计算阶乘的递归函数:

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

调用 factorial 函数:

(factorial 5) ; 结果为 120

6. 高阶函数与 mapcar

Lisp 提供了高阶函数(即将函数作为参数传递的函数)。mapcar 是常用的高阶函数,用于对列表中的每个元素应用指定函数:

(mapcar #'1+ '(1 2 3 4)) ; 结果为 (2 3 4 5)
(mapcar (lambda (x) (* x x)) '(1 2 3 4)) ; 结果为 (1 4 9 16)

7. Lambda 表达式

Lambda 表达式用于定义匿名函数,例如:

(lambda (x y) (+ x y))

可以直接使用匿名函数:

(funcall (lambda (x y) (+ x y)) 3 4) ; 结果为 7

8. 宏(macro)

宏允许你在编译阶段改变代码结构。宏和函数类似,但它们操作的是表达式的代码,而不是结果。简单示例:

(defmacro square (x)`(* ,x ,x))(square 4) ; 结果为 16

Lisp 的基本概念和语法并不复杂,但其强大的递归处理能力和符号计算特性让它在特定场景中表现出色。通过掌握基本的列表操作、函数定义、条件语句和宏,你已经具备了在 Lisp 中编写基础程序的能力。

作者简介

前腾讯电子签的前端负责人,现 whentimes tech CTO,专注于前端技术的大咖一枚!一路走来,从小屏到大屏,从 Web 到移动,什么前端难题都见过。热衷于用技术打磨产品,带领团队把复杂的事情做到极简,体验做到极致。喜欢探索新技术,也爱分享一些实战经验,帮助大家少走弯路!

温馨提示:可搜老码小张公号联系导师

相关文章:

Lisp 语言入门教程(一)

Lisp&#xff08;“LISt Processing”&#xff09;是一种古老而强大的编程语言&#xff0c;特别适合处理符号数据和列表。Lisp 是一种以括号和递归见长的语言&#xff0c;它启发了许多编程范式。以下是一个基础教程&#xff0c;帮助你快速了解 Lisp 的基本语法和功能。 1. 认识…...

Git - Think in Git

记录一些使用Git时的一些想法 区的概念 当 clone 仓库代码到本地后四个区相同 当编辑代码后&#xff0c;工作区 与其余三个区不同 当使用 add 将修改的代码暂存后&#xff0c;索引区与 工作区 相同 当使用 commit 将修改的代码提交后&#xff0c;仓库区 与 索引区 和 工作区 相…...

jmeter常用配置元件介绍总结之用linux服务器压测

系列文章目录 安装jmeter jmeter常用配置元件介绍总结之用linux服务器压测 1.编写测试脚本2.执行测试脚本 1.编写测试脚本 在linux服务器上进行压测&#xff0c;由于是没有界面的&#xff0c;因此我们可以先在界面上把压测脚本写好&#xff1a; 如图&#xff1a;我这里简单的写…...

VL210-Q4 适用于USB延长线 扩展坞

VL210芯片技术文档 一、概述 VL210是一款由VIA Technologies&#xff08;威盛电子&#xff09;生产的第四代先进USB 3.0 Hub控制器。它集成了多种先进技术和功能&#xff0c;适用于各种USB集线器应用&#xff0c;如独立的USB集线器、笔记本/Ultrabook停靠点/port-replicators…...

怎么样绑定域名到AWS(亚马逊云)服务器

1&#xff0c;拿着你买的域名去亚马逊申请一个证书。申请证书分两种&#xff0c;一种是去亚马逊后台填域名手动申请 &#xff0c;另一种是通过API来申请&#xff0c;类似如下代码&#xff1a; 2、证验证书。有两种方式&#xff1a;一种是通过邮件&#xff0c;另一种去到域名提供…...

Clickhouse集群新建用户、授权以及remote权限问题

新建用户 create user if not exists user on cluster 集群名称 IDENTIFIED WITH plaintext_password BY 密码;给用户授查询、建表、删表的权限 GRANT create table,select,drop table ON 数据库实例.* TO user on cluster 集群名称 ;在其他节点下用户建本地表成功&#…...

OPENCV 检测直线[opencv--3]

opencv中集成了很多好用的函数&#xff0c;比如霍夫变换检测直线的函数&#xff0c;当然&#xff0c;考虑到看我文章的人水平&#xff0c;我这里只讲讲如何使用这个函数&#xff0c;和怎么调节其中的参数 先把运行效果PO出来吧 #include "CV_ERROR.h" #include &q…...

FFmpeg 4.3 音视频-多路H265监控录放C++开发十三.2:avpacket中包含多个 NALU如何解析头部分析

前提&#xff1a; 注意的是&#xff1a;我们这里是从avframe转换成avpacket 后&#xff0c;从avpacket中查看NALU。 在实际开发中&#xff0c;我们有可能是从摄像头中拿到 RGB 或者 PCM&#xff0c;然后将pcm打包成avframe&#xff0c;然后将avframe转换成avpacket&#xff0…...

【MATLAB】目标检测初探

文章目录 0 前言1 目标检测概述2 算法实践2.1 YOLO v22.2 YOLO v3 3 项目实践3.1 项目背景和数据集3.2 实践结果3.3 算法对比 4 工具箱与数据标注5 总结 0 前言 之前因为项目原因&#xff0c;做了一个基于YOLOv5实现目标检测的程序&#xff0c;是基于Python做的&#xff0c;直接…...

SpringCloud 微服务消息队列灰度方案 (RocketMQ 4.x)

目录 背景遇到的问题 RocketMQ 基础基础消息模型扩展后的消息模型部署模型相关概念点 方案对比影子Topic的方案Tag的方案UserProperty的方案影子Group的方案灰度分区的方案方案对比 灰度分区方案设计适配只有部分灰度的情况所做的功能扩展消费者&#xff08;无灰度&#xff09;…...

厘清标准差和标准误:因果推断的统计学基础

标准差&#xff0c;指 一次抽样中 个体取值间的离散程度&#xff0c;反映了 个体取值对样本均值的代表性。 标准误&#xff0c;指 多次抽样中 样本均值间的离散程度&#xff0c;反映了 样本均值对总体均值的代表性。 公众号原文-厘清标准差和标准误&#xff1a;因果推断的统计…...

GESP4级考试语法知识(贪心算法(二))

排队接水2代码&#xff1a; #include<iostream> #include<cstdio> #include<algorithm> using namespace std; struct people {int num;int time; }; people s[1001]; int n,r,a[1001]; double sum,ave; bool cmp(people x,people y) {return x.time<y.t…...

MATLAB 使用教程 —— 命令窗口输入命令,工作区显示变量

命令在命令窗口输入变量在工作区显示 MATLAB 桌面包含的面板如下&#xff1a; 当前文件夹 - 此面板允许访问项目文件夹和文件。命令窗口 - 这是主要区域&#xff0c;用户在命令行中输入命令&#xff0c;命令提示符(>>).工作区 - 工作区显示所有变量&#xff0c;无论是创…...

LeetCode 热题100(八)【二叉树】(3)

目录 8.11二叉树展开为链表&#xff08;中等&#xff09; 8.12从前序与中序遍历序列构造二叉树&#xff08;中等&#xff09; 8.13路径总和III&#xff08;中等&#xff09; 8.14二叉树的最近公共祖先&#xff08;中等&#xff09; 8.15二叉树中的最大路径和&#xff08;困…...

uniapp h5实现录音

使用npm安装 npm install recorder-core引入Recorder库 可以使用import、require、html script等你适合的方式来引入js文件&#xff0c;下面的以import为主要参考&#xff0c;其他引入方式根据文件路径自行调整一下就可以了。 //必须引入的Recorder核心&#xff08;文件路径是…...

字节跳动Android面试题汇总及参考答案(80+面试题,持续更新)

Android 四大组件是什么? Android 四大组件分别是 Activity、Service、Broadcast Receiver 和 Content Provider。 Activity 是 Android 应用中最基本的组件,用于实现用户界面。它可以包含各种视图控件,如按钮、文本框等。一个 Activity 通常对应一个屏幕的内容。用户可以通…...

【go从零单排】通道select、通道timeout、Non-Blocking Channel Operations非阻塞通道操作

&#x1f308;Don’t worry , just coding! 内耗与overthinking只会削弱你的精力&#xff0c;虚度你的光阴&#xff0c;每天迈出一小步&#xff0c;回头时发现已经走了很远。 &#x1f4d7;概念 select 语句是 Go 的一种控制结构&#xff0c;用于等待多个通道操作。它类似于 s…...

PSRR仿真笔记

1.首先打开bandgap的testbench电路&#xff0c;选择schematic 2.打开电路后,选择VDD模块&#xff0c;然后按键盘Q&#xff0c;进行编辑&#xff0c;将AC magnitude改为1 V 3.修改完成后&#xff0c;点击左上角Launch > ADE Explorer 4.在出现的窗口中&#xff0c;选择Creat…...

AUTOSAR_EXP_ARAComAPI的7章笔记(3)

☞返回总目录 相关总结&#xff1a;AutoSar AP简单多绑定总结 7.3 多绑定 如在 5.4.3 小节中简要讨论的&#xff0c;某个代理类 / 骨架类的不同实例之间的技术传输是不同的&#xff0c;多绑定描述了这种情况的解决方案。多种技术原因都可能导致这种情况出现&#xff1a; 代…...

WSADATA 关键字详细介绍

WSADATA 是 Windows Sockets API&#xff08;Winsock&#xff09;中用于存储 Winsock 库的初始化信息的结构体。在使用 Winsock API 之前&#xff0c;必须通过调用 WSAStartup() 函数进行初始化&#xff0c;WSADATA 结构体用于接收有关 Winsock 库版本的信息。Winsock 是 Windo…...

AI 自动获客系统正在重构企业线索获取方式

在数字化营销持续深化的当下&#xff0c;企业获客成本逐年攀升&#xff0c;传统 “广撒网” 的线索获取模式早已难以为继。销售团队大量时间耗费在无效线索筛选上&#xff0c;真正用于精准跟进、成交的时间不足两成&#xff0c;人力与投入的失衡让企业陷入增长内耗。而 AI 自动…...

遥感影像配准总对不齐?OpenCV+RST+PROJ4三重坐标系对齐实战(附WGS84→UTM→影像本地坐标的转换矩阵速查表)

第一章&#xff1a;Shell脚本的基本语法和命令Shell脚本是Linux/Unix系统自动化任务的核心工具&#xff0c;以可执行文本文件形式存在&#xff0c;由Bash等shell解释器逐行解析运行。其语法简洁但严谨&#xff0c;对空格、分号、引号和换行符敏感&#xff0c;需严格遵循语法规则…...

智能家居控制中心:OpenClaw+Qwen3.5-9B语音指令中转

智能家居控制中心&#xff1a;OpenClawQwen3.5-9B语音指令中转 1. 为什么需要语音控制的智能家居中枢&#xff1f; 去年装修新房时&#xff0c;我装了十几款不同品牌的智能设备——从米家的灯泡到涂鸦的窗帘电机&#xff0c;再到HomeKit的温控器。每次想调整家居状态&#xf…...

[2026 职场洗牌系列 01] 程序员正在“杀死”自己的工作?科技行业高危预警

长久以来&#xff0c;学计算机&#xff08;CS&#xff09;在很多年轻人眼里就等同于拿到了通往高薪和阶层跃升的金钥匙。大家都觉得&#xff0c;只要把代码敲得溜&#xff0c;这辈子在职场上基本就稳了。可惜&#xff0c;到了2026年的今天&#xff0c;生成式AI正在毫不留情地把…...

HBuilderX + 极光推送踩坑实录:免费版为啥息屏收不到通知?手把手教你配置与避坑

HBuilderX与极光推送免费版避坑指南&#xff1a;破解息屏通知失效难题 早上八点&#xff0c;你的咖啡还没喝完&#xff0c;测试组的消息就炸开了锅——"昨晚推送的版本在息屏状态下根本收不到通知&#xff01;"作为使用HBuilderX开发跨平台应用的团队&#xff0c;这个…...

用过才敢说 AI论文平台测评:2026年最值得尝试的几款工具

2026年真正好用的AI论文平台&#xff0c;核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测&#xff0c;千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队&#xff0c;覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…...

STM32智慧停车场系统设计与SQLite应用

基于STM32的智慧停车场管理系统设计与实现&#xff08;SQLite版&#xff09;1. 项目概述1.1 系统架构本智慧停车场管理系统采用分布式架构设计&#xff0c;由以下核心组件构成&#xff1a;下位机控制单元&#xff1a;STM32F103ZET6微控制器作为主控芯片感知层&#xff1a;OV772…...

Thorium浏览器架构深度解析:基于Chromium的极致性能优化实践

Thorium浏览器架构深度解析&#xff1a;基于Chromium的极致性能优化实践 【免费下载链接】thorium Chromium fork named after radioactive element No. 90. Windows and MacOS/Raspi/Android/Special builds are in different repositories, links are towards the top of the…...

Kali Linux 2026.1 发布 (2026 主题 BackTrack 模式) - 领先的渗透测试发行版

Kali Linux 2026.1 发布 (2026 主题 & BackTrack 模式) - 领先的渗透测试发行版 The most advanced Penetration Testing Distribution 请访问原文链接&#xff1a;https://sysin.org/blog/kali-linux/ 查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&…...

如何将TaskWeaver与LangChain无缝集成:扩展AI代理能力边界的终极指南

如何将TaskWeaver与LangChain无缝集成&#xff1a;扩展AI代理能力边界的终极指南 【免费下载链接】TaskWeaver A code-first agent framework for seamlessly planning and executing data analytics tasks. 项目地址: https://gitcode.com/gh_mirrors/ta/TaskWeaver T…...