当前位置: 首页 > 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;多菌株益…...

FlowState Lab跨周期波动模式提取效果:从秒级到年度的规律发现

FlowState Lab跨周期波动模式提取效果&#xff1a;从秒级到年度的规律发现 1. 时间序列分析的革命性突破 时间序列分析领域最近迎来了一项重要突破。传统方法往往只能聚焦单一时间尺度&#xff0c;要么分析高频交易数据&#xff0c;要么研究季节性规律&#xff0c;很难同时捕…...

Focaler-IoU: More Focused Intersection over Union——更聚焦的交并比损失

《Focaler-IoU: More Focused Intersection over Union Loss》主要研究内容可以全面概括如下&#xff1a; 研究背景与问题&#xff1a; 在目标检测任务中&#xff0c;边界框回归的精度很大程度上取决于损失函数的设计。现有的IoU-based损失函数&#xff08;如GIoU、CIoU、EIoU…...

华为ENSP实战:手把手教你搭建住宅小区网络拓扑(附完整配置脚本)

华为ENSP实战&#xff1a;从零构建智能小区网络的全栈解决方案 当清晨第一缕阳光透过窗帘洒进房间&#xff0c;现代人睁开眼的第一件事往往是拿起手机查看消息——这种习以为常的场景背后&#xff0c;是无数个日夜运行的住宅小区网络在默默支撑。作为网络工程师&#xff0c;我…...

多模态融合避坑手册:为什么你的跨模态模型总掉进‘语义鸿沟’?

多模态融合避坑手册&#xff1a;为什么你的跨模态模型总掉进‘语义鸿沟’&#xff1f; 当你兴奋地将精心设计的跨模态模型投入训练&#xff0c;却发现验证集指标像过山车一样剧烈波动时&#xff0c;问题往往出在那些容易被忽视的工程细节里。上周有位工程师向我展示了他的视频…...

Java 25并发模型重构实战:用StructuredTaskScope替代CompletableFuture组合的4种高危写法(附JFR火焰图对比)

第一章&#xff1a;Java 25结构化并发演进全景图Java 25正式将结构化并发&#xff08;Structured Concurrency&#xff09;从孵化阶段&#xff08;JEP 428、437、444&#xff09;升级为标准特性&#xff0c;标志着JVM平台在并发模型抽象上完成关键跃迁。该机制通过作用域&#…...

国产MCU实战:华大HC32F460串口DMA+超时中断,替代STM32空闲中断的完整配置流程

国产MCU实战&#xff1a;华大HC32F460串口DMA超时中断的工程化实现指南 在嵌入式开发领域&#xff0c;国产MCU的崛起为开发者提供了更多选择。华大半导体的HC32F460系列以其出色的性能和灵活的配置&#xff0c;成为许多项目中替代STM32的理想选择。本文将深入探讨如何在这款芯片…...

如何高效捕获网页媒体资源?猫抓插件让智能嗅探变得如此简单

如何高效捕获网页媒体资源&#xff1f;猫抓插件让智能嗅探变得如此简单 【免费下载链接】cat-catch 猫抓 chrome资源嗅探扩展 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否遇到过想保存网页上的精彩视频却找不到下载按钮的尴尬&#xff1f;是否曾…...

Unity内联序列化类的秘密

一个藏在Inspector面板背后的"俄罗斯套娃" 一、开篇:一个看似简单的问题 你在Unity中写了一个脚本: public class Player : MonoBehaviour {public int health;public float speed...

告别黑盒操作:详解mmc_utils在Android设备上的20+个实用命令(从extcsd读到RPMB写)

eMMC深度操作指南&#xff1a;解锁mmc-utils的20个高阶应用场景 当你的Android设备出现存储性能下降、分区异常或安全验证需求时&#xff0c;系统自带的工具往往束手无策。此时&#xff0c;一个被低估的神器mmc-utils正躺在Linux内核源码树中等待被唤醒——它不仅能够读取eMMC芯…...

终极指南:如何在Windows上实现完美的三指拖拽体验

终极指南&#xff1a;如何在Windows上实现完美的三指拖拽体验 【免费下载链接】ThreeFingersDragOnWindows Enables macOS-style three-finger dragging functionality on Windows Precision touchpads. 项目地址: https://gitcode.com/gh_mirrors/th/ThreeFingersDragOnWind…...