极致之美——百行代码实现全新智能语言Lisp(5)
作者:月影 来源:51js 发布时间:2010-07-13 13:07:00
我们来看一下为什么要定义ret函数:
我想通过前面的解释和实际应用大家已经理解了引用(quote)的重要性,并且很容易证明:[[_,e]] = [e]
现在的问题是我们必须要定义一个引用的反函数f,令[f,[_,e]] = e
而显然地ret正是这样一个函数
[map,x,y]期望x是原子,y是一个表,如果[assoc,x,y]非空返回[assoc,x,y]的值否则返回x
LispScript.Run(
[defun,'map',['x','y'],
[cond,[[isNull,[assoc,'x','y']],'x'],[true,[assoc,'x','y']]]]
);
[maplist,x,y]期望x和y都是表,返回由x中的每个元素t求[map,t,y]的结果构成的表
LispScript.Run(
[defun,'maplist',['x','y'],
[cond,
[[atom,[_,'x']],[map,'x','y']],
[true,[cons,['maplist',[car,[_,'x']],'y'],['maplist',[cdr,[_,'x']],'y']]]
]
]
);因此我们能够定义函数来连接表,替换表达式等等.也许算是一个优美的表示法, 那下一步呢? 现在惊喜来了. 我们可以写一个函数作为我们语言的解释器:此函数取任意Lisp表达式作自变量并返回它的值. 如下所示:
LispScript.Run(
[defun,'_eval',['e','a'],
[ret,[maplist,[_,'e'],'a']]
]
);
_eval.的简洁程度或许超出了我们原先的预想,于是这样我们获得了LispScrip实现的一个完整的自身的解析器!
让我们回过头考虑一下这意味着什么. 我们在这儿得到了一个非常优美的计算模型. 仅用quote,atom,eq,car,cdr,cons,和cond, 我们定义了函数_eval.,它事实上实现了我们的语言,用它可以定义和(或)动态生成任何我们想要的额外的函数和各种文法(这一点比较重要)


猜你喜欢
- 在java的应用中,我们经常会对数据库进行必要的操作,下来我们就了解一下如何用java连接mysql数据库 以及java连接sql serv
- 本文实例为大家分享了python使用KNN算法识别手写数字的具体代码,供大家参考,具体内容如下# -*- coding: utf-8 -*-
- 对于Python而言代码缩进是一种语法,Python没有像其他语言一样采用{}或者begin...end分隔代码块,而是采用代码缩进和冒号来
- 引言这三个排序方法应对日常工作基本够用先说一下三者的区别sort, sorted 是用在 list 数据类型中的排序方法argsort 是用
- 本文实例讲述了python实现的简单文本类游戏实现方法。分享给大家供大家参考。具体实现方法如下:######################
- import requestsimport reimport jsonimport ossession = requests.session
- 复制 复制是从一个MySQL服务器(master)将数据拷贝到另外一台或多台MySQL服务器
- 如果点击“保存文本文件”将会弹出保存文本文件的对话框口,保存的文本文件中的内容是如下:/* 2010年4月5日0
- 本文实例讲述了Javascript连接Access数据库的方法。分享给大家供大家参考。具体实现方法如下:var roc = roc || {
- PHP convert_uuencode() 函数实例编码字符串:<?php $str = "Hello world!&qu
- 定义链表node结构:class ListNode: def __init__(self,data):
- 本文实例讲述了Python实现简单的可逆加密程序。分享给大家供大家参考。具体如下:Python代码如下:#coding=utf-8 
- 先贴代码package mainimport ("fmt")// Send the sequence 2, 3, 4,
- 安装完 anaconda运行如下代码执行不了import numpy as npimport os,sys#获取当前文件夹,并根据文件名de
- 本文实例讲述了Python判断有效的数独算法。分享给大家供大家参考,具体如下:一、题目判断一个 9x9 的数独是否有效。只需要根据以下规则,
- // 去掉字符串的头空格(左空格) function LTrim(str){ var i; for(i=0;i<str.length;
- mysql 8.0.20 winx64.zip压缩版安装教程记录如下,分享给大家1.下载MySQL官网:链接直接点击链接也可以下载:mysq
- 需求:前端获取到摄像头信息,通过模型来进行判断人像是否在镜头中,镜头是否有被遮挡。实现步骤:1、通过video标签来展示摄像头中的内容2、通
- 在进行keras 网络计算时,有时候需要获取输入张量的维度来定义自己的层。但是由于keras是一个封闭的接口。因此在调用由于是张量不能直接用
- 前言提到太阳系,大家可能会想到哥白尼和他的日心说,或是捍卫、发展日心说的斗士布鲁诺,他们像一缕光一样照亮了那个时代的夜空,对历史感兴趣的小伙