美文网首页程序员
Write Yourself a Scheme in 48 Ho

Write Yourself a Scheme in 48 Ho

作者: 阿能是一只猫 | 来源:发表于2015-09-26 23:27 被阅读172次

    原文。
    https://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours/Conclusion

    你现在有了一个实现了大部分Scheme标准并且工作状态良好的解释器了(实现了保护函数,lambda表达式,静态作用域,符号,字符串,整型,列表操作以及赋值等功能)。你不仅可以在REPL中和它进行交互,也可以通过批量载入的方式一次性对代码文件进行执行。你可以在你自己的程序中定义Scheme函数库,或是在交互状态下通过load函数将它们载入。通过awk,sed之类的文本处理工具,你可以将UNIX命令的输出格式化成Lisp支持的列表形式然后将它们载入你的Scheme程序,然后使用我们的解释器进行shell编程。

    剩下还有一些你可以添加到这个解释器里的功能。宏能够让你在程序实际被执行之前对源代码进行转换。这能够帮助你很方便的对语言的功能进行扩展,事实上很多Scheme标准中的功能(let绑定和一些其他控制流方面的功能)都是通过宏来实现的。R5RS的Section 4.3详细定义了整个宏系统的语法和语义,并且有一大堆相关实现的论文。基本上,你需要创建一个与readExpr和eval糅杂在一起的函数,读取代码块和宏环境,找到转换器关键字,然后根据模板语言的规则对代码进行对应的转换和重写。

    Continuations是一种操作,保存以及执行多次“剩下的计算部分”的方法。有了它,你就可以拥有其他主流编程语言那样的控制流功能了。最简单的实现Continuations的方法就是将程序转换成continuation-passing style,这样eval函数会额外需要一个continutation参数并且呼叫它而不是像之前那样仅仅将结果返回。这个参数需要贯穿整个eval函数的递归调用链,但是只有在执行“call-with-current-continuation”调用的时候才会去处理它。

    Dynamic-wind能够通过一个函数栈来实现。它会在中断continuation时执行栈中的函数并且在恢复continuation时将函数栈存储(到continuation数据类型中)起来以供之后执行。

    如果你还对Haskell有更大的兴趣的话,这里有一些其他的库可以给你参考:

    • Web应用:WASH,一个基于Monad的web框架
    • 数据库:HaskellDB,通过将SQL语句封装成一系列Haskell函数,从而提供查询语句的类型安全性的保证。
    • GUI编程:Fudgets和wxHaskell。wxHaskell更像一个传统的MVC GUI库而Fudgets则包含了很多关于函数式编程在GUI应用中的探索。
    • 并发编程:Software Transactional Memory出自Composable Memory Transactions
    • 网络编程:GHC网络库

    这会给你之后的深入研究提供一个好的起点。玩的开心~

    相关文章

      网友评论

        本文标题:Write Yourself a Scheme in 48 Ho

        本文链接:https://www.haomeiwen.com/subject/wscwcttx.html