zoukankan      html  css  js  c++  java
  • 写一个简单的lisp解释器(1)

    YouTube上看到了一个2004年版的SICP讲解

    看完解释器那一个视频后,对解释器中的Eval和Apply有了基本的认识于是想开始直接写一个简单lisp的解释器

    我的理解是:

    Eval是来求表达式的值的;

    Apply 则是用来求函数值的;

    什么是表达式 ? atom 或者 a list of expression

    atom 包括 symbol number 还有 string

    number 和 string 都是代表它们自己

    symbol 代表一个变量(variable) 它需要绑定一个值(value) 或者是一个number,string 或者 一个函数

    所以综上:

    Eval 根据一些规则来求表达式的值

    1.是number 或 string 吗? 是就返回它们因为它们就代表它们本身

    2.是 if , define....... 这些需要特殊考虑的值吗? 是就执行它们特殊的语法

    3.是函数调用吗? 是则利用Apply来进行函数调用,同时Apply也需要Eval来得到函数和值

    举个例子,eval 的过程如下:

    1 (eval '(* (+ 1 2 3) 2))
    2 
    3 (apply (eval '*) (map eval '((+ 1 2 3) 2)))
    4 
    5 (apply [primitive *] (list 6 2))
    6 
    7 ;====> 12

    4.都不是则报错

    参考

    Yosoro
  • 相关阅读:
    Linux vim的四中模式
    Linux 打包压缩解压缩
    Linux 写入查看文本
    Linux 文件复制和移动
    Linux 创建删除目录
    Linux cd命令
    vim 文本替换
    linux工作中使用命令
    is 和 == 的区别
    再次复习python
  • 原文地址:https://www.cnblogs.com/tclan126/p/8040566.html
Copyright © 2011-2022 走看看