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

lisp 表达式求值规则

lisp 表达式求值规则
一个要求值的 lisp 对象被称为lisp表达式(form)。
lisp 表达式分三种
    1. 自求值表达式。前面说过数字、字符串、向量都是自求值表达式。还有两个特殊的符号 t 和 nil 也可以看成是自求值表达式。
    2. 符号表达式。符号的求值结果就是符号的值。如果它没有值,就会出现 void-variable 的错误。
    3. 列表表达式。关键看第一个元素
        列表的第一个表达式如果是一个符号,解释器会查找这个符号的函数值。如果函数值是另一个符号,则会继续查找这个符号的函数值。
       这称为“symbol function indirection”。符号功能追踪
       最后直到某个符号的函数值是:
           1. lisp 函数(lambda 表达式)、byte-code 函数、原子函数( primitive function).
              这是正常的函数调用(function call),求值规则如下:
              先对列表中其它元素求值,求值的结果作为函数调用的真正参数。
              然后使用 apply 函数用这些参数调用函数。
              可以理解为把参数和变量绑定到函数后,对函数体顺序求值,返回最后一个 form 的值。

           2. 宏、
              将宏展开。如果扩展后还是一个宏调用,则会继续扩展下去,直到扩展的结果不再是一个宏调用为止。

           3. 特殊表达式或 autoload 对象。
              这些特殊表达式通常是用于控制结构或者变量绑定。例如IF语句,WHEN 语句等
       每个特殊表达式都有对应的求值规则
    
    4. 以上类型都不是,
    比如某个符号的函数值是前面出现的某个符号导致无限循环,
    或者某个符号函数值为空,
    都会导致一个错误 eval: Symbol’s function definition is void: ...


最后用这个elisp 伪代码来说明一下 elisp 中的求值规则:
(defun eval (exp)
  (cond
   ((numberp exp) exp)
   ((stringp exp) exp)
   ((arrayp exp) exp)
   ((symbolp exp) (symbol-value exp))
   ((special-form-p (car exp))
    (eval-special-form exp))
   ((fboundp (car exp))
    (apply (car exp) (cdr exp)))
   (t
    (error "eval: Symbol's function definition is void: %S" exp))))

参考1: elisp 手册
参考2: 网上资料

相关文章:

lisp 表达式求值规则

lisp 表达式求值规则 一个要求值的 lisp 对象被称为lisp表达式(form)。 lisp 表达式分三种 1. 自求值表达式。前面说过数字、字符串、向量都是自求值表达式。还有两个特殊的符号 t 和 nil 也可以看成是自求值表达式。 2. 符号表达式。符号的求值…...

Sophos Firewall OS (SFOS) 19.5 MR1 - 同步下一代防火墙

Sophos Firewall OS (SFOS) 19.5 MR1 - 同步下一代防火墙 请访问原文链接:https://sysin.org/blog/sfos-19-5/,查看最新版。原创作品,转载请保留出处。 作者主页:www.sysin.org Sophos Firewall v19.5 现已推出 Sophos Firewall…...

为什么很多人转行IT考虑后端开发Java?

顺应互联网时代发展的选择 在计算机广泛运用于社会的各个角落的今天,选择学习一门计算机语言真的很不错,它会让你的生活从此与众不同。软件渗透到组织的运营和管理的后台之中,形成了组织运营支撑平台。这种形态是传统软件的重要应用场景。在…...

WebDAV之π-Disk派盘+Cloud Player

Cloud Player 支持WebDAV方式连接π-Disk派盘。 推荐一款云媒体播放器是存储在常见云平台中的内容的通用播放器。 Cloud Player云媒体播放器是存储在常见云平台中的内容的通用播放器,无需将其下载到设备。支持以下云平台:Google Drive、DropBox、One Drive、WebDav等。此外,…...

Python-datetime、time包常用功能汇总

目录基础知识时间格式有哪些?Python中的时间格式化时间戳datetimedatedatetimetimedeltatime常用获取今天凌晨字符串?将一个时间格式的字符串转为时间戳将一个时间戳转为指定格式的字符串全部代码参考基础知识 时间格式有哪些? 「格林威治标…...

Spring MVC 源码- HandlerAdapter 组件(四)之 HandlerMethodReturnValueHandler

HandlerAdapter 组件HandlerAdapter 组件,处理器的适配器。因为处理器 handler 的类型是 Object 类型,需要有一个调用者来实现 handler 是怎么被执行。Spring 中的处理器的实现多变,比如用户的处理器可以实现 Controller 接口或者 HttpReques…...

2023面试必备:web自动化测试POM设计模式详解

1.背景 为UI页面写自动化测试用例时(如:web自动化、app自动化),使用普通的线性代码,测试用例中会存在大量的元素定位及操作细节,当UI界面变化时,测试用例也要跟着变化,在自动化测试…...

【人工智能 AI】Robotic Process Automation (RPA) 机器人流程自动化 (RPA)

目录 ROBOTIC PROCESS AUTOMATION SERVICES机器人流程自动化服务 What is RPA? 什么是机器人流程自动化?...

ubuntu/linux系统知识(37)systemd管理临时文件的方法systemd-tmpfiles

1、systemd-tmpfiles Linux产生大量的临时文件和目录,例如/tmp、/run 。systemd提供了一个结构化的可配置方法来管理临时文件和目录,即systemd-tmpfiles工具和配套的几个服务,以实现创建、删除和管理临时文件。 systemd创建了几个调用syste…...

云计算专业和计算机专业哪个好就业?

云计算专业其实也是属于计算机类专业呢,他包括了计算机硬件设备、计算机网络、磁盘柜、操作系统、中间件、数据库、服务器/虚拟机、应用软件开发等技术内容,云计算技术是以IT服务的形式面向用户的;所以云计算不是一门技术,而是众多…...

electron sha512 checksum mismatch

sha512 checksum mismatch错误 此错误常常发生在electron检查更新时,导致检查更新失败。 自动更新使用的模块 electron-updater or electron-differential-updater win下electron-builder打包 使用electron-builder打包之后,进行版本增量更新遇到的…...

使用Chemistry Development Kit (CDK) 来进行化学SMILES子结构匹配

摘要 SMILES是一种用于描述化合物结构的字符串表示法,其中子结构搜索是在大规模化合物数据库中查找特定的结构。然而,这种搜索方法存在一个误解,即将化合物的子结构视为一个独立的实体进行搜索,而忽略了它们在更大的化合物中的上…...

CMake模块的使用和自定义模块

CMake模块的使用和自定义模块一、前言二、使用Find模块2.1、准备工作2.2、添加头文件路径和库文件2.3、< name >_FOUND 来控制工程特性三、编写自定义的Find模块3.1、 准备工作3.2、cmake 模块3.3、使用自定义的FindHELLO 模块构建工程3.4、如果没有找到hello library四、…...

jvm调优参数配置

在JVM启动参数中&#xff0c;可以设置跟内存、垃圾回收相关的一些参数设置&#xff0c;默认情况不做任何设置JVM会工作的很好&#xff0c;但对一些配置很好的Server和具体的应用必须仔细调优才能获得最佳性能。通过设置我们希望达到一些目标&#xff1a; GC的时间足够的小 GC的…...

Leetcode.1567 乘积为正数的最长子数组长度

题目链接 Leetcode.1567 乘积为正数的最长子数组长度 Rating &#xff1a; 1710 题目描述 给你一个整数数组 nums&#xff0c;请你求出乘积为正数的最长子数组的长度。 一个数组的子数组是由原数组中零个或者更多个连续数字组成的数组。 请你返回乘积为正数的最长子数组长度…...

部分库与使用方法总结(自用)

1.tqdm tqdm是Python的进度条库&#xff0c;可以在长循环操作中显示进度提示 tqdm.tqdm:传入数字 from tqdm import tqdm for i in tqdm(range(1, 5)):print(i)使用bar_format "{l_bar}{bar}"可以只显示进度条 from tqdm import tqdm for i in tqdm(range(1, 5), ba…...

C++实现日期类

文章目录前言1.日期类的功能分析1.大致分析2.接口设计2.具体实现1.日期类的成员函数和成员变量2.初始化(构造函数&#xff09;3.对日期进行天数推算4.比较相关的运算符重载5.前置后置自增或自减6.日期相减与流插入流提取1.日期相减2.重载流插入和流提取3.总结前言 之前介绍了C…...

想成为一名专业黑客,但不知道从哪里学起?我来教你。

成为一名黑客需要学什么&#xff1f; 想成为一名专业黑客&#xff0c;但不知道从哪里学起”很多人在后台问过这个问题&#xff0c;今天就为你介绍成为专业黑客必须学习的十个方面的知识&#xff0c;希望能为迷惘中的你指明方向。 想要成为网络hacker黑客&#xff1f;先来学习…...

VMware ESXi 7.0 U3k Unlocker OEM BIOS 集成网卡驱动和 NVMe 驱动 (集成驱动版)

ESXi 7 U3 标准版集成 Intel 网卡、USB 网卡 和 NVMe 驱动 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-esxi-7-u3-sysin/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;www.sysin.org 本次针对 2023-02-21 发布的 ESXi …...

新的计算方法:预测益生菌在不同生长条件下的相互作用

谷禾健康 益生菌可以产生有益的维生素、消化酶、必需氨基酸、免疫调节和抗菌代谢产物&#xff0c;从而促进人体健康&#xff0c;预防肠道炎症性疾病、自身免疫性疾病和胃肠道感染。其宝贵特性已得到健康行业、医疗专业人士和公众的认可。 比起单菌株益生菌&#xff0c;多菌株益…...

【linux学习】linux工具篇(下)

Linux调试器-gdb使用&#xff0c;Linux项目自动化构建工具-make/Makefile我是程序员小青蛙&#xff0c;下面分享linux的工具利用前言程序的发布方式有两种&#xff0c;debug模式和release模式 Linux gcc/g出来的二进制程序&#xff0c;默认是release模式 要使用gdb调试&#xf…...

C++面试考点 头文件与实现文件形式

为什么C标准头文件没有所谓的.h后缀&#xff1f; 在一个源文件中&#xff0c;函数模板的声明与定义分离是可以的&#xff0c;即使把函数模板的实现放在调用 之下也是ok的&#xff0c;与普通函数一致。//函数模板的声明 template <class T> T add(T t1, T t2)&#xff1b;…...

为什么92%的NotebookLM项目在第3轮迭代后风格失控?——基于17个真实客户日志的归因分析与防御协议

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;为什么92%的NotebookLM项目在第3轮迭代后风格失控&#xff1f;——基于17个真实客户日志的归因分析与防御协议 在对17个企业级NotebookLM部署案例进行全链路日志回溯后&#xff0c;我们发现一个高度一致…...

终极游戏模组管理指南:Nexus Mods App如何让你轻松玩转模组世界

终极游戏模组管理指南&#xff1a;Nexus Mods App如何让你轻松玩转模组世界 【免费下载链接】NexusMods.App Home of the development of the Nexus Mods App 项目地址: https://gitcode.com/gh_mirrors/ne/NexusMods.App 厌倦了手动安装模组时的各种冲突和兼容性问题&a…...

3分钟搞定!Windows性能优化神器CPUDoc零基础上手指南

3分钟搞定&#xff01;Windows性能优化神器CPUDoc零基础上手指南 【免费下载链接】CPUDoc 项目地址: https://gitcode.com/gh_mirrors/cp/CPUDoc 你有没有遇到过这样的情况&#xff1f;明明电脑配置不错&#xff0c;玩游戏时帧数却忽高忽低&#xff1b;多开几个软件就感…...

高通8650 AudioReach实战:手把手调试GSL-Passthru-GPR数据流(附动态调试脚本)

高通8650 AudioReach实战&#xff1a;GSL-Passthru-GPR数据流调试全指南 当你在深夜的实验室里盯着示波器上那条毫无波动的音频信号线时&#xff0c;手机突然响起一阵刺耳的电流噪声——这可能是每位音频驱动工程师都经历过的噩梦时刻。高通AudioReach架构作为现代移动音频系统…...

oracle数据库的了解和使用

文章目录 1. 概述1&#xff09;数据库2&#xff09;实例3&#xff09;表空间4&#xff09;用户5) schema6&#xff09;数据库的持久化7&#xff09;注释8&#xff09;mysql和oracle数据库逻辑结构类比 2. 数据库操作1&#xff09;创建表空间2&#xff09;创建操作表空间的用户3…...

Spingboot企业员工信息管理系统—免费毕设源码分享28210

摘要本论文介绍了基于Spring Boot框架开发的“传奇今生企业员工信息管理系统”。系统提高企业人力资源管理的效率和精确度&#xff0c;通过数字化手段优化员工信息管理流程&#xff0c;提升企业管理水平。系统分为用户端和管理员端&#xff0c;提供了丰富的功能模块。用户端功能…...

MLP分类模型结构设计实战:小样本高维数据的工程化落地

1. 这不是教科书里的“Hello World”&#xff0c;而是一次真实场景下的MLP工程实践你打开任何一本神经网络入门书&#xff0c;第一页大概率写着“用MLP识别手写数字”。但现实里&#xff0c;没人会为MNIST单独搭一个模型——真正卡住你的&#xff0c;是数据不干净、类别不平衡、…...

博客从 Ubuntu 16.04 迁移到 FreeBSD:成本减半,性能提升超 10 倍!

Bruno Croci 的网站迁移之旅Bruno Croci 正在为 2026 年柏林的开源硬件峰会做准备。他的博客在 Ubuntu 16.04 上运行了 10 年&#xff0c;于 2026 年 5 月 21 日&#xff0c;他将其迁移到了 FreeBSD。迁移动机&#xff1a;旧系统的安全隐患与成本考量这个博客在 Digital Ocean …...