计算机里的神灵(SCIP)

计算机程序的构造和解释

我找到计算机里的神灵了,开心一刻

下面是从MIT官网下载的 SCIP求值器(解释器)的代码,这个官网是个宝藏库
还有其他视频课程和 SCIP的问题答案和可运行代码
链接:https://ocw.mit.edu/courses/6-001-structure-and-interpretation-of-computer-programs-spring-2005/pages/projects/

;;
;; syntax.scm - 6.001 Spring 2005
;; selectors and constructors for scheme expressions
;;(define (tagged-list? exp tag)(and (pair? exp) (eq? (car exp) tag)))(define (self-evaluating? exp)(or (number? exp) (string? exp) (boolean? exp)))(define (quoted? exp) (tagged-list? exp 'quote))
(define (text-of-quotation exp) (cadr exp))(define (variable? exp) (symbol? exp))
(define (assignment? exp) (tagged-list? exp 'set!))
(define (assignment-variable exp) (cadr exp))
(define (assignment-value exp) (caddr exp))
(define (make-assignment var expr)(list 'set! var expr))(define (definition? exp) (tagged-list? exp 'define))
(define (definition-variable exp)(if (symbol? (cadr exp))   (cadr exp)   (caadr exp)))
(define (definition-value exp)(if (symbol? (cadr exp))(caddr exp)(make-lambda (cdadr exp) (cddr exp))))  ; formal params, body
(define (make-define var expr)(list 'define var expr))(define (lambda? exp) (tagged-list? exp 'lambda))
(define (lambda-parameters lambda-exp) (cadr lambda-exp))
(define (lambda-body lambda-exp) (cddr lambda-exp))
(define (make-lambda parms body) (cons 'lambda (cons parms body)))(define (if? exp) (tagged-list? exp 'if))
(define (if-predicate exp) (cadr exp)) 
(define (if-consequent exp) (caddr exp)) 
(define (if-alternative exp) (cadddr exp))
(define (make-if pred conseq alt) (list 'if pred conseq alt))(define (cond? exp) (tagged-list? exp 'cond))
(define (cond-clauses exp) (cdr exp))
(define first-cond-clause car)
(define rest-cond-clauses cdr)
(define (make-cond seq) (cons 'cond seq))(define (let? expr) (tagged-list? expr 'let))
(define (let-bound-variables expr) (map first (second expr)))
(define (let-values expr) (map second (second expr)))
(define (let-body expr) (cddr expr)) ;differs from lecture--body may be a sequence
(define (make-let bindings body)(cons 'let (cons bindings body)))(define (begin? exp) (tagged-list? exp 'begin))
(define (begin-actions begin-exp) (cdr begin-exp))
(define (last-exp? seq) (null? (cdr seq)))
(define (first-exp seq) (car seq))
(define (rest-exps seq) (cdr seq))
(define (sequence->exp seq)(cond ((null? seq) seq)((last-exp? seq) (first-exp seq))(else (make-begin seq))))
(define (make-begin exp) (cons 'begin exp))(define (application? exp) (pair? exp))
(define (operator app) (car app))
(define (operands app) (cdr app))
(define (no-operands? args) (null? args))
(define (first-operand args) (car args))
(define (rest-operands args) (cdr args))
(define (make-application rator rands)(cons rator rands))(define (and? expr) (tagged-list? expr 'and))
(define and-exprs cdr)
(define (make-and exprs) (cons 'and exprs))
(define (or? expr) (tagged-list? expr 'or))
(define or-exprs cdr)
(define (make-or exprs) (cons 'or exprs))

lisp解释器,就这样手撕出来了,看到神灵,万物跪拜

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/142970.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

gitee-快速设置

快速设置— 如果你知道该怎么操作,直接使用下面的地址 HTTPS SSH: gitgitee.com:liuzl33078235/esp-idf.git 我们强烈建议所有的git仓库都有一个README, LICENSE, .gitignore文件 初始化 readme 文件 Git入门?查看 帮助 , Visual Studio / TortoiseG…

mysql实际调优

一般实际调优的情况就不需要去考虑mysql数据库结构或者命名优化那些。做这些优化是大动作,也不是咱们一般人去接触到的。 所以我们针对mysql的调优其实大部分还是针对索引进行优化。 我们刚接触这个表的话可以先查询当前表中所有的索引 使用 SHOW INDEX FROM yo…

指针笔试题详解

个人主页:点我进入主页 专栏分类:C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 欢迎大家点赞,评论,收藏。 一起努力,一起奔赴大厂。 目录 1.前言 2.指针题写出下列程序的结…

第1章 数据结构绪论

1.1 开场白 1.2 你数据结构怎么学的 1.3 数据结构起源 早期人们都把计算机理解为数值计算工具,就是感觉计算机当然是用来计算的,所以计算机解决问题,应该是先从具体问题中抽象出一个适当的数据模型,设计出一个解此数据模型的算…

栈(Java)

目录 1.什么是栈 2.栈的使用 3.栈的模拟实现 1.什么是栈 栈:是一种特殊的线性表,只允许在其固定的一端进行插入和删除操作。栈中的元素遵循先进后出(后进先出)原则 栈顶:进行插入和删除数据的一端 栈底&#xff1a…

怎么压缩word文档的大小?

怎么压缩word文档的大小?Word文件压缩成一个普遍存在的挑战,现在看来至少是这样的。最近,我们接到了许多用户的疑问,他们想知道如何压缩Word文件大小。这个问题似乎广泛存在于办公场景中,因此我们需要找到解决方案。导…

测试用例:在线音乐播放器

从 功能测试、界面测试、性能测试、兼容性测试、易用性测试、安全测试、弱网测试等 七个方面对在线音乐播放器进行设计测试用例

【广州华锐互动】利用VR开展工业事故应急救援演练,确保救援行动的可靠性和有效性

在工业生产中,事故的突发性与不可预测性常常带来巨大的损失。传统的应急演练方式往往存在场地限制、成本高、效果难以衡量等问题。然而,随着虚拟现实(VR)技术的快速发展,VR工业事故应急救援演练应运而生,为…

Cannot find module ‘core-js/modules/es6.regexp.constructor‘

npm run dev 之后报如下错误 解决方法:npm install core-js2 如果超时或者下载时间慢可以尝试 用cnpm install core-js2

Exception in thread “main“ java.sql.SQLException: No suitable driver

详细报错信息如下: Exception in thread "main" java.sql.SQLException: No suitable driver at java.sql.DriverManager.getDriver(DriverManager.java:315) at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions.$anonfun$driverC…

宝塔nginx搭建Ftp文件服务器

一:创建FTP 填入账号密码后,选择根目录,这个根目录就是nginx要代理的目录 二:配置nginx root的地址就是上面填的FTP根目录 三:http访问 服务器ip端口号加图片 例如我放了一个320.jp 我服务器ip是110.120.120.120 那…

PSINS工具箱学习(二)姿态的表示:姿态阵、四元数、欧拉角、等效旋转矢量的概念和转换

原始 Markdown文档、Visio流程图、XMind思维导图见:https://github.com/LiZhengXiao99/Navigation-Learning 文章目录 一、基础概念1、坐标系定义1. 惯性坐标系( i 系 )2. 地心地固坐标系( e 系 )3. 导航坐标系( n 系&…

Multisim14.0仿真(二十五)高频小信号调谐放大器

一、仿真原理图: 二、仿真效果图:

API(十一) 获取openresty编译信息

一 ngx.config 说明: 不常用,了解即可 ngx.config.subsystem 说明: 用的四层还是七层代理 ngx.config.debug 说明: 返回的是boolean类型, openresty rpm安装一般没有 --with-debug编译选项对比: nginx rpm 安装一般携带 --wi…

面试算法13:二维子矩阵的数字之和

题目 输入一个二维矩阵,如何计算给定左上角坐标和右下角坐标的子矩阵的数字之和?对于同一个二维矩阵,计算子矩阵的数字之和的函数可能由于输入不同的坐标而被反复调用多次。例如,输入图2.1中的二维矩阵,以及左上角坐标…

Vue.js路由及Node.js的入门使用---超详细

一,Vue路由 1.1 路由是什么 路由是用来管理应用程序中不同页面之间导航的概念。Vue Router是Vue.js官方提供的路由管理器,它允许我们通过定义路由规则和视图组件来配置路由 1.2 路由给我们带来的好处有哪些? 单页应用(Single Pag…

【深度学习实验】前馈神经网络(final):自定义鸢尾花分类前馈神经网络模型并进行训练及评价

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入必要的工具包 1. 构建数据集(IrisDataset) 2. 构建模型(FeedForward) a. __init__(初始化) b. forward(前向传播) 3.整合训练、评估…

2023年腾讯云服务器优惠活动整理汇总

腾讯云是腾讯集团倾力打造的云计算品牌,为了吸引更多的用户,腾讯云经常会推出各种各样的优惠活动。本文将为大家整理汇总一些腾讯云服务器的优惠活动,希望能够帮助到需要购买腾讯云服务器的用户。 一、腾讯云服务器优惠券 腾讯云优惠券是腾讯…

瑞云介绍使用ZBrush和Marmoset工具包制作的风格化巨怪战斗机

Renderbus瑞云渲染的小编今天给大家介绍下Gianluca Squillace使用 ZBrush 和 Marmoset 工具包制作巨怪战士的一些技巧。这位艺术家还贴心地告诉大家,有些步骤是可以省略跳过的,这样就可以节省时间,帮助我们快速完成角色的创作啦。快速有用的步…

云计算与大数据——Storm配置及运行WordCountTopology(保姆级教程!)

云计算与大数据——Storm配置及运行WordCountTopology(保姆级教程!) 前言 当今世界正处于云计算和大数据的快速发展阶段,而Storm作为一种高效、可靠的实时计算框架,受到了广泛的关注和应用。在这篇文章中&#xff0c…