爱意满满的作品展示区。
luohaha

分享一个五一假期写的 lisp 解释器

  •  1
     
  •   luohaha · May 2, 2016 · 3692 views
    This topic created in 3682 days ago, the information mentioned may be changed or developed.

    用 c 语言实现的 lisp 解释器,基本实现了 lisp 的特性。功能比较简单,代码主要分成三个部分:

    1. 词法分析。将输入的文件流转化成单词数组。
    2. 语法分析。根据单词数组,生成 AST 。
    3. 执行部分。这里参考了 SICP 中的第四章中, eval 和 apply 的讲解。

    用它写出来的代码如下, 实现了 Fibonacci 函数:

    ;;第一种递归求 fibonacci 的方法
    (define fib-1
        (lambda (n)
            (cond ((= n 0) 0)
                  ((= n 1) 1)
                  (else (+ (fib-1 (- n 1))
                           (fib-1 (- n 2)))))))
     
    ;;第二种, 尾递归
    (define fib-iter
        (lambda (a b count)
            (if (= count 0)
                b
                (fib-iter (+ a b) a (- count 1)))))
    (define fib-2
        (lambda (n)
            (fib-iter 1 0 n)))
     
     
    (fib-2 100)
    

    项目代码在 https://github.com/luohaha/Dior 。欢迎交流,求 star 。

    10 replies    2016-05-10 21:48:33 +08:00
    SkyEcho
        1
    SkyEcho  
       May 3, 2016 via Android
    赞~
    luohaha
        2
    luohaha  
    OP
       May 3, 2016 via Android
    @a302800411 多谢!
    petelin
        3
    petelin  
       May 3, 2016 via Android
    Mark
    yurivvvvv
        4
    yurivvvvv  
       May 4, 2016
    咦, byr !
    luohaha
        5
    luohaha  
    OP
       May 4, 2016 via Android
    @yurivvvvv 哈哈 对啊
    lsmgeb89
        6
    lsmgeb89  
       May 7, 2016 via Android
    Lisp 解释器用 C 写只要这点代码!以后也试试看……
    luohaha
        7
    luohaha  
    OP
       May 8, 2016 via Android
    @lsmgeb89 是的,而且代码还可以精简
    lcj2class
        8
    lcj2class  
       May 8, 2016 via iPhone
    赞👍🏻
    yangxin0
        9
    yangxin0  
       May 10, 2016 via iPhone
    汉字都码进代码了....可以从外部文件读嘛,这样更容易做国际化
    luohaha
        10
    luohaha  
    OP
       May 10, 2016
    @yangxin0 很有道理,多谢啦!
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4274 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 49ms · UTC 05:28 · PVG 13:28 · LAX 22:28 · JFK 01:28
    ♥ Do have faith in what you're doing.