﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-λ-calculus-随笔分类-脚本技术</title><link>http://www.cppblog.com/vczh/category/6825.html</link><description>【QQ：343056143（已满），504254078】【MSN：vczh@hotmail.com】【Email：vczh@163.com】</description><language>zh-cn</language><lastBuildDate>Mon, 11 May 2009 19:33:05 GMT</lastBuildDate><pubDate>Mon, 11 May 2009 19:33:05 GMT</pubDate><ttl>60</ttl><item><title>手把手教你写脚本引擎（五）——简单的高级语言（3，符号表）</title><link>http://www.cppblog.com/vczh/archive/2009/05/11/82539.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Mon, 11 May 2009 02:48:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/05/11/82539.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/82539.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/05/11/82539.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/82539.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/82539.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 符号表的结构的复杂度跟语言的语义规则的复杂度有关。对于C#来说，每一个符号都附带了一大堆信息，譬如位置啦，所在的namespace啦，类型啦什么的。对于JavaScript来说，符号表几乎是不需要的，因为东西都动态了，编译时几乎不检查内容。语义分析的输出是符号表，代码生成的输入是符号表和语法树。因此语法树除了放语法相关的内容，语义相关的内容最好放到符号表里面（譬如说表达式的类型啦，语句的scope结果啦）。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/05/11/82539.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/82539.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-05-11 10:48 <a href="http://www.cppblog.com/vczh/archive/2009/05/11/82539.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>手把手教你写脚本引擎 PPT与Demo（一）</title><link>http://www.cppblog.com/vczh/archive/2009/03/28/78156.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Sat, 28 Mar 2009 09:43:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/03/28/78156.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/78156.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/03/28/78156.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/78156.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/78156.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: <br>华南理工大学微软俱乐部程序设计语言特别兴趣小组——手把手教你写脚本引擎系列（一）<br>陈梓瀚<br><br>PPT内容：<br>1、简单指令集的设计方法（支持分支、循环、函数、递归）。<br>2、编译控制流程（分支和循环）的一般模式。<br>3、函数调用的详细过程。<br>4、5个示例程序。<br><br>Demo内容：<br>PPT中5个示例程序的运行过程（动画），左边是单步，右边是堆栈内容。<br><br>含下载，内详。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/03/28/78156.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/78156.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-03-28 17:43 <a href="http://www.cppblog.com/vczh/archive/2009/03/28/78156.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Kernel FP的图形Demo实现！</title><link>http://www.cppblog.com/vczh/archive/2008/12/30/70735.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Mon, 29 Dec 2008 18:41:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/12/30/70735.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/70735.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/12/30/70735.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/70735.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/70735.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 其实有了一整套的Kernel FP API之后，只需要插入几个外部函数就可以让Kernel FP绘图了。现在我们看一看这个Demo的样子。<br>&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/12/30/70735.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/70735.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-12-30 02:41 <a href="http://www.cppblog.com/vczh/archive/2008/12/30/70735.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Kernel FP编译器工具实现</title><link>http://www.cppblog.com/vczh/archive/2008/12/27/70477.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Fri, 26 Dec 2008 16:07:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/12/27/70477.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/70477.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/12/27/70477.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/70477.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/70477.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 这次终于实现了两个exe，一个是编译器，一个是提供控制台API的虚拟机。等提供GUI的虚拟机出来之后就开放出来（内有图和代码）。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/12/27/70477.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/70477.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-12-27 00:07 <a href="http://www.cppblog.com/vczh/archive/2008/12/27/70477.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Kernel FP 编译器MakeFile开发完成</title><link>http://www.cppblog.com/vczh/archive/2008/12/24/70275.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Wed, 24 Dec 2008 13:20:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/12/24/70275.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/70275.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/12/24/70275.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/70275.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/70275.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Kernel FP的MakeFile可以指定输出文件、报告文件以及代码文件，并且可以继承其他的MakeFile。MakeFile的格式和分析器代码如下：&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/12/24/70275.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/70275.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-12-24 21:20 <a href="http://www.cppblog.com/vczh/archive/2008/12/24/70275.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Kernep FP实现虚拟机的序列化与反序列化</title><link>http://www.cppblog.com/vczh/archive/2008/12/23/70174.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Tue, 23 Dec 2008 08:50:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/12/23/70174.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/70174.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/12/23/70174.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/70174.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/70174.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 由于Kernel FP的编译结果是独立的，执行的时候不需要源代码的符号的参与，因此可以将编译结果进行序列化与反序列化。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/12/23/70174.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/70174.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-12-23 16:50 <a href="http://www.cppblog.com/vczh/archive/2008/12/23/70174.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Kernel FP添加反射API</title><link>http://www.cppblog.com/vczh/archive/2008/12/20/69938.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Sat, 20 Dec 2008 14:10:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/12/20/69938.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/69938.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/12/20/69938.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/69938.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/69938.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 为了让宿主程序可以更加清楚一份Kernel FP代码的内容，我今天为Kernel FP添加了反射的API。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/12/20/69938.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/69938.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-12-20 22:10 <a href="http://www.cppblog.com/vczh/archive/2008/12/20/69938.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Kernel FP的do-end语法糖添加自己的异常处理系统</title><link>http://www.cppblog.com/vczh/archive/2008/12/19/69825.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Fri, 19 Dec 2008 05:23:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/12/19/69825.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/69825.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/12/19/69825.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/69825.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/69825.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 有的时候，IO的异常处理由于需要一个IOEnv类型的参数而显得非常麻烦。这个时候我们可以定制自己的一套异常处理系统，从而让程序变得清晰起来。自己的异常处理系统不同于IO，是没有副作用的函数集合。下面让我们看一看如何使用自定义的异常处理系统来分析一个四则运算表达式。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/12/19/69825.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/69825.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-12-19 13:23 <a href="http://www.cppblog.com/vczh/archive/2008/12/19/69825.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Kernel FP API实现一个运行Kernel FP代码的控制台程序</title><link>http://www.cppblog.com/vczh/archive/2008/12/18/69721.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Thu, 18 Dec 2008 03:15:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/12/18/69721.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/69721.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/12/18/69721.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/69721.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/69721.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 说到底Kernel FP是一个脚本引擎，所以是需要API的。接下来的代码用来加载一些Kernel FP代码文件，并执行main函数。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/12/18/69721.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/69721.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-12-18 11:15 <a href="http://www.cppblog.com/vczh/archive/2008/12/18/69721.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在纯函数式语言内实现有关IO的循环</title><link>http://www.cppblog.com/vczh/archive/2008/12/15/69540.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Mon, 15 Dec 2008 15:56:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/12/15/69540.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/69540.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/12/15/69540.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/69540.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/69540.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 我们知道，循环本身是没有返回值的。所以在纯函数式语言下，跟IO有关的循环才有足够的副作用来产生价值。于是利用IO Monad，我们就可以实现循环了。循环是一个函数：&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/12/15/69540.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/69540.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-12-15 23:56 <a href="http://www.cppblog.com/vczh/archive/2008/12/15/69540.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Kernel FP的do-end IO语法糖实现！</title><link>http://www.cppblog.com/vczh/archive/2008/12/15/69532.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Mon, 15 Dec 2008 14:22:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/12/15/69532.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/69532.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/12/15/69532.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/69532.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/69532.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 前面说过，需要一个语法糖来组织IO，并且在其中的一步产生错误的时候立刻返回错误。现在我们看一段代码：&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/12/15/69532.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/69532.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-12-15 22:22 <a href="http://www.cppblog.com/vczh/archive/2008/12/15/69532.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Kernel FP的IO实验</title><link>http://www.cppblog.com/vczh/archive/2008/12/15/69494.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Mon, 15 Dec 2008 06:44:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/12/15/69494.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/69494.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/12/15/69494.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/69494.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/69494.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 由于Kernel FP是纯的，所以一个函数的输出只跟输入有关系，所以从屏幕上输入文字的函数read是不能定义成func read::string的。因为根据这个性质，read的结果必须是一样的。所以一定要在每一次read的时候给不同的参数。但是其实没关系，这个可以用编译器来解决，就算read的顺序是运行时决定的。同样的问题也出现在Haskell的IO Monad上，由于资料无穷多，我就不详细解释了。下面给出没有语法糖的，能够正常并确定顺序地使用IO函数的一段代码：<br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span>&nbsp;<span style="COLOR: #000000">data&nbsp;IOError<br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;ioemessage&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #000000">type&nbsp;IOEnv<br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #000000">type&nbsp;IO&nbsp;T&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;IOEnv&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;maybe&nbsp;(pair&nbsp;T&nbsp;IOEnv)&nbsp;IOError<br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000">func&nbsp;read&nbsp;::&nbsp;IO&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;alias&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">demo::read</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000">func&nbsp;readint&nbsp;::&nbsp;IO&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;alias&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">demo::readint</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000">func&nbsp;write&nbsp;::&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;IO&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;alias&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">demo::write</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000">func&nbsp;writeln&nbsp;::&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;IO&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;alias&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">demo::writeln</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000">func&nbsp;iovoid&nbsp;::&nbsp;IO&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;alias&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">demo::iovoid</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #000000">def&nbsp;(</span><span style="COLOR: #000000">&gt;&gt;&gt;</span><span style="COLOR: #000000">)&nbsp;a&nbsp;b&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;a&nbsp;</span><span style="COLOR: #000000">&gt;&gt;=</span><span style="COLOR: #000000">&nbsp;\p</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">b<br></span><span style="COLOR: #008080">13</span>&nbsp;<span style="COLOR: #000000">func&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;T&nbsp;::&nbsp;T&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;IO&nbsp;T<br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #000000">def&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;x&nbsp;e&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;success&nbsp;(pair&nbsp;x&nbsp;e)<br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #000000">func&nbsp;(</span><span style="COLOR: #000000">&gt;&gt;=</span><span style="COLOR: #000000">)&nbsp;T1&nbsp;T2&nbsp;::&nbsp;IO&nbsp;T1&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;(T1&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;IO&nbsp;T2)&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;IO&nbsp;T2<br></span><span style="COLOR: #008080">16</span>&nbsp;<span style="COLOR: #000000">def&nbsp;(</span><span style="COLOR: #000000">&gt;&gt;=</span><span style="COLOR: #000000">)&nbsp;a&nbsp;b&nbsp;e&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;select&nbsp;a&nbsp;e&nbsp;of<br></span><span style="COLOR: #008080">17</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;fail&nbsp;message&nbsp;:&nbsp;fail&nbsp;message<br></span><span style="COLOR: #008080">18</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;success&nbsp;p&nbsp;:&nbsp;select&nbsp;p&nbsp;of<br></span><span style="COLOR: #008080">19</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;pair&nbsp;x&nbsp;e2&nbsp;:&nbsp;b&nbsp;x&nbsp;e2<br></span><span style="COLOR: #008080">20</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;end<br></span><span style="COLOR: #008080">21</span>&nbsp;<span style="COLOR: #000000">end<br></span><span style="COLOR: #008080">22</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">23</span>&nbsp;<span style="COLOR: #000000">def&nbsp;ioseq&nbsp;ios&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;foldr&nbsp;iovoid&nbsp;(</span><span style="COLOR: #000000">&gt;&gt;&gt;</span><span style="COLOR: #000000">)&nbsp;ios<br></span><span style="COLOR: #008080">24</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">25</span>&nbsp;<span style="COLOR: #000000">def&nbsp;mainIO_0&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;<br></span><span style="COLOR: #008080">26</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;read&nbsp;</span><span style="COLOR: #000000">&gt;&gt;=</span><span style="COLOR: #000000">&nbsp;\name</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">27</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;read&nbsp;</span><span style="COLOR: #000000">&gt;&gt;=</span><span style="COLOR: #000000">&nbsp;\place</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">28</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;writeln&nbsp;(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Hello&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">name</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;from&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">place</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">&gt;&gt;&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">29</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;readint&nbsp;</span><span style="COLOR: #000000">&gt;&gt;=</span><span style="COLOR: #000000">&nbsp;\a</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">30</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;readint&nbsp;</span><span style="COLOR: #000000">&gt;&gt;=</span><span style="COLOR: #000000">&nbsp;\b</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">31</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;writeln&nbsp;(itoa&nbsp;(a</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">b))&nbsp;</span><span style="COLOR: #000000">&gt;&gt;&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">32</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;writeln&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Press&nbsp;[ENTER]&nbsp;to&nbsp;enter</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&gt;&gt;&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">33</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;read<br></span><span style="COLOR: #008080">34</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">35</span>&nbsp;<span style="COLOR: #000000">def&nbsp;mainIO_1&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;ioseq&nbsp;(transform&nbsp;writeln&nbsp;[</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">genius</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">vczh</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">])</span></div>
<br>&nbsp;&nbsp;&nbsp; mainIO_0使用类型系统强制了IO函数的执行顺序，mainIO_1证明了IO也是可以使用正常的操作函数去进行复杂操作的。不过mainIO_0那种写法还是挺不舒服的，这就是语法糖发挥作用的啦。我只需要给出一种相对好看的语法，然后在语法分析的时候翻译成这样就行了。 <br><br>&nbsp;&nbsp;&nbsp; 这种写法的好处是，万一其中有一个IO出了问题，错误信息会直接传达出去，中断函数执行。而且整个函数都是在类型系统的保护之下的。 
<img src ="http://www.cppblog.com/vczh/aggbug/69494.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-12-15 14:44 <a href="http://www.cppblog.com/vczh/archive/2008/12/15/69494.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Kernel FP支持更精细的重载</title><link>http://www.cppblog.com/vczh/archive/2008/12/15/69478.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Mon, 15 Dec 2008 03:42:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/12/15/69478.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/69478.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/12/15/69478.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/69478.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/69478.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 考虑以下代码：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span>&nbsp;<span style="COLOR: #000000">def&nbsp;overloading&nbsp;x&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">General&nbsp;overloading</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">2</span>&nbsp;<span style="COLOR: #000000">func&nbsp;overloading::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">3</span>&nbsp;<span style="COLOR: #000000">def&nbsp;overloading&nbsp;str&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">String&nbsp;overloading</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">4</span>&nbsp;<span style="COLOR: #000000">func&nbsp;overloading&nbsp;T::list&nbsp;T</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">5</span>&nbsp;<span style="COLOR: #000000">def&nbsp;overloading&nbsp;xs&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">List&nbsp;overloading</span><span style="COLOR: #000000">"</span></div>
<br>&nbsp;&nbsp;&nbsp; 这是三个函数，类型分别为：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;func&nbsp;overloading&nbsp;T1&nbsp;::&nbsp;(</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">T1</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;(system.list&nbsp;system.</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">))&nbsp;codefrom&nbsp;</span><span style="COLOR: #000000">125</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">2</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;func&nbsp;overloading&nbsp;::&nbsp;((system.list&nbsp;system.</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;(system.list&nbsp;system.</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">))&nbsp;codefrom&nbsp;</span><span style="COLOR: #000000">127</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">3</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;func&nbsp;overloading&nbsp;T1&nbsp;::&nbsp;((system.list&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">T1</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;(system.list&nbsp;system.</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">))&nbsp;codefrom&nbsp;</span><span style="COLOR: #000000">129</span></div>
<br>&nbsp;&nbsp;&nbsp; 所以当我们写overloading的时候，究竟选择什么呢？三个类型都是可以接受的，而且都是可以完美通过类型推导的。于是我新加了一个规则。首先求出需要的具体类型（可能是含有参数的类型），然后计算从函数类型到具体类型所需要替换的类型参数的个数以及每个类型参数的解，最后计算出一个系数=数量&#215;65536+解的深度和。<br><br>&nbsp;&nbsp;&nbsp; 深度的规定比较简单，基本类型深度为1，闭包类型为参数和结果两种类型的深度的最大值加1，带有参数的类型等于最大参数深度加1。所以在这个例子上，我们可以得到，T1到list char的解为T1=list char，list char到list char的解为0，list T1到list char的解为T1=char，系数分别是65538、0和65537，所以理所当然地挑选了第二个。下面看例子：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span>&nbsp;<span style="COLOR: #000000">def&nbsp;main114&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;overloading&nbsp;</span><span style="COLOR: #000000">1024</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">2</span>&nbsp;<span style="COLOR: #000000">def&nbsp;main115&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;overloading&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Genius&nbsp;Vczh!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">3</span>&nbsp;<span style="COLOR: #000000">def&nbsp;main116&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;overloading&nbsp;[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">]</span></div>
<br>&nbsp;&nbsp;&nbsp; 下面是运行结果：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span>&nbsp;<span style="COLOR: #000000">main114返回值：</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">General&nbsp;overloading</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">2</span>&nbsp;<span style="COLOR: #000000">main115返回值：</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">String&nbsp;overloading</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">3</span>&nbsp;<span style="COLOR: #000000">main116返回值：</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">List&nbsp;overloading</span><span style="COLOR: #000000">"</span></div>
<img src ="http://www.cppblog.com/vczh/aggbug/69478.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-12-15 11:42 <a href="http://www.cppblog.com/vczh/archive/2008/12/15/69478.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Kernel FP的列表和操作符语法糖完成！</title><link>http://www.cppblog.com/vczh/archive/2008/12/15/69456.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Sun, 14 Dec 2008 16:37:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/12/15/69456.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/69456.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/12/15/69456.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/69456.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/69456.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 现在的Kernel FP已经支持列表语法和操作符语法了。<br><br>&nbsp;&nbsp;&nbsp; 列表语法为[1,2,3,4,5]。原来是需要写成list 1 (list 2 (list 3 (list 4 (list 5 empty))))的。不过后面这种写法仍然是支持的。<br>&nbsp;&nbsp;&nbsp; 操作符可以自定义，凡是仅由&#8220;+-*/%&lt;&gt;=!&amp;^|~@#$?&#8221;构成，而又不是&#8220;|&#8221;和&#8220;=&#8221;的记号都可以视为二元操作符。如果是+、-、*、/、%、&lt;、&lt;=、&gt;、&gt;=、==、!=、^、&amp;&amp;和||的话，优先级跟C++一样。如果是其他操作符，那么优先级一致而且最低。<br><br>&nbsp;&nbsp;&nbsp; 因为操作符也是个函数，因此将操作符作为函数使用的时候只需要加一对括号就可以了，不过中间不可以有空格。所以我们就可以定义&#8220;+&#8221;并写出下面的代码：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span>&nbsp;<span style="COLOR: #000000">def&nbsp;(</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;iadd<br></span><span style="COLOR: #008080">2</span>&nbsp;<span style="COLOR: #000000">def&nbsp;(</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;fadd<br></span><span style="COLOR: #008080">3</span>&nbsp;<span style="COLOR: #000000">def&nbsp;(</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;concat<br></span><span style="COLOR: #008080">4</span>&nbsp;<span style="COLOR: #000000">def&nbsp;main102&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">5</span>&nbsp;<span style="COLOR: #000000">def&nbsp;main103&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2.0</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">6</span>&nbsp;<span style="COLOR: #000000">def&nbsp;main104&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Genius</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;Vczh!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">7</span>&nbsp;<span style="COLOR: #000000">def&nbsp;main105&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">8</span>&nbsp;<span style="COLOR: #000000">def&nbsp;main106&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2.0</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">9</span>&nbsp;<span style="COLOR: #000000">def&nbsp;main107&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Genius</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;Vczh!</span><span style="COLOR: #000000">"</span></div>
<br>&nbsp;&nbsp;&nbsp; 下面是执行结果：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span>&nbsp;<span style="COLOR: #000000">main102返回值：</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">2</span>&nbsp;<span style="COLOR: #000000">main103返回值：</span><span style="COLOR: #000000">3.0</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">3</span>&nbsp;<span style="COLOR: #000000">main104返回值：</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Genius&nbsp;Vczh!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">4</span>&nbsp;<span style="COLOR: #000000">main105返回值：</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">5</span>&nbsp;<span style="COLOR: #000000">main106返回值：</span><span style="COLOR: #000000">3.0</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">6</span>&nbsp;<span style="COLOR: #000000">main107返回值：</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Genius&nbsp;Vczh!</span><span style="COLOR: #000000">"</span></div>
<br>&nbsp;&nbsp;&nbsp; 操作符的优先级比函数低，因此sin a + sin b实际上是(sin a)+(sin b)。 于是下面的代码返回8.0：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span>&nbsp;<span style="COLOR: #000000">def&nbsp;main108&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;ln&nbsp;(exp&nbsp;</span><span style="COLOR: #000000">3.0</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;ln&nbsp;(exp&nbsp;</span><span style="COLOR: #000000">5.0</span><span style="COLOR: #000000">)</span></div>
<br>&nbsp;&nbsp;&nbsp; 有了操作符之后，就可以慢慢为IO、Exception等复杂对象建模并且开发语法糖了。
<img src ="http://www.cppblog.com/vczh/aggbug/69456.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-12-15 00:37 <a href="http://www.cppblog.com/vczh/archive/2008/12/15/69456.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Kernel FP 的四则运算式子分析程序</title><link>http://www.cppblog.com/vczh/archive/2008/12/13/69374.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Sat, 13 Dec 2008 15:13:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/12/13/69374.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/69374.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/12/13/69374.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/69374.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/69374.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 为了测试Kernel FP的健壮性以及进行一些bug的排除，一个四则运算式子的分析程序理所当然地就被实现了。代码如下：&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/12/13/69374.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/69374.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-12-13 23:13 <a href="http://www.cppblog.com/vczh/archive/2008/12/13/69374.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Kernel FP成功运行一部分列表处理程序</title><link>http://www.cppblog.com/vczh/archive/2008/12/13/69309.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Fri, 12 Dec 2008 18:03:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/12/13/69309.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/69309.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/12/13/69309.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/69309.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/69309.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:     经过1个小时的奋斗，修了3个bug，终于使得Kernel FP能运行的代码渐渐多了起来。现在可以看看纯函数式语言简洁的代码及运行结果啦！<br><br>    下面是很多用于测试的main函数：&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/12/13/69309.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/69309.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-12-13 02:03 <a href="http://www.cppblog.com/vczh/archive/2008/12/13/69309.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Kernel FP成功运行小程序</title><link>http://www.cppblog.com/vczh/archive/2008/12/11/69166.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Thu, 11 Dec 2008 07:03:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/12/11/69166.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/69166.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/12/11/69166.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/69166.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/69166.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Kernel FP已经可以运行小程序了。现在还处于测试阶段，过于复杂的程序估计是跑不过的。先简单介绍一下如何在C++调用Kernel FP的代码。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/12/11/69166.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/69166.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-12-11 15:03 <a href="http://www.cppblog.com/vczh/archive/2008/12/11/69166.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Kernel FP：Expected语法完全支持！</title><link>http://www.cppblog.com/vczh/archive/2008/11/03/65885.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Mon, 03 Nov 2008 13:41:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/11/03/65885.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/65885.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/11/03/65885.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/65885.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/65885.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 新加入的Expected语法已经完全支持了。使用了Expected的符号会因为调用者的不同而使用不同的scope内的函数。代码如下：&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/11/03/65885.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/65885.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-11-03 21:41 <a href="http://www.cppblog.com/vczh/archive/2008/11/03/65885.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Kernel FP的Expected语法实验</title><link>http://www.cppblog.com/vczh/archive/2008/11/02/65796.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Sun, 02 Nov 2008 15:36:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/11/02/65796.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/65796.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/11/02/65796.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/65796.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/65796.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 有了Expected语法之后总是要实验一下的。现在给出一个非完整函数eq的声明，并用一个列表查找函数使用eq。已知代码如下：&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/11/02/65796.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/65796.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-11-02 23:36 <a href="http://www.cppblog.com/vczh/archive/2008/11/02/65796.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>决定为Kernel FP加入一个跟模板函有关数的语法</title><link>http://www.cppblog.com/vczh/archive/2008/11/02/65793.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Sun, 02 Nov 2008 14:52:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/11/02/65793.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/65793.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/11/02/65793.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/65793.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/65793.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Kernel FP的模板函数比较严格。对于任意的模板函数的类型参数，这个参数必须能够接受所有类型。当然，类型推导会通过阅读代码来精确化程序员设定的类型。譬如说一个函数F的类型是T->T，但是经过阅读代码发现，参数只能是某种类型的列表，那么类型推导就会将这个函数的类型修改为list T->list T。<br><br>但是这样会有一个问题。类型推导只能够推导已知的函数。如果一个模板函数里面用了操作符，而这个操作符暂时只为几个类型定义的话，那么由于不是所有的类型都能够接受该操作符，所以这个操作符就没办法给未知确切类型的参数使用。下面就有一个例子：&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/11/02/65793.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/65793.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-11-02 22:52 <a href="http://www.cppblog.com/vczh/archive/2008/11/02/65793.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Kernel FP 模板函数实例化</title><link>http://www.cppblog.com/vczh/archive/2008/11/01/65717.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Sat, 01 Nov 2008 15:05:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/11/01/65717.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/65717.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/11/01/65717.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/65717.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/65717.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 今天写了Kernel FP模板函数实例化的代码。虽然还有一点小bug，不过还是说一下。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/11/01/65717.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/65717.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-11-01 23:05 <a href="http://www.cppblog.com/vczh/archive/2008/11/01/65717.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>改进Kernel FP编译器，生成类型推导的调试信息</title><link>http://www.cppblog.com/vczh/archive/2008/10/30/65498.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Wed, 29 Oct 2008 18:04:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/10/30/65498.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/65498.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/10/30/65498.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/65498.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/65498.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 类型推导过于复杂，已经到了无法Step In/Over的地步了，于是只好靠输出大量调试信息来解决问题。这里给出了我为Kernel FP开发的一些简单的调试用宏。在不需要调试信息的时候，可以通过简单关闭调试而将产生调试信息的运行时负担完全去除。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/10/30/65498.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/65498.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-10-30 02:04 <a href="http://www.cppblog.com/vczh/archive/2008/10/30/65498.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>是时候重构了！</title><link>http://www.cppblog.com/vczh/archive/2008/10/27/65240.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Mon, 27 Oct 2008 13:23:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/10/27/65240.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/65240.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/10/27/65240.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/65240.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/65240.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 实习的时候，自己的时间明显没有在学校的时候多啊。这次Kernel FP拖了很久，一个多月都还没写完。幸好语法分析器用了之前开发的Syngram，要不得多花一个月。Kernel FP的类型推导的代码实在是很难看，趁着又发现了一个Bug，重构一下。<br><br>内含代码&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/10/27/65240.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/65240.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-10-27 21:23 <a href="http://www.cppblog.com/vczh/archive/2008/10/27/65240.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Kernel FP 虚拟机结构</title><link>http://www.cppblog.com/vczh/archive/2008/10/19/64417.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Sun, 19 Oct 2008 07:29:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/10/19/64417.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/64417.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/10/19/64417.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/64417.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/64417.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Kernel FP的虚拟机设计起来比较别扭，主要还是因为laziness的问题。不过现在已经有了一个能用的想法了。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/10/19/64417.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/64417.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-10-19 15:29 <a href="http://www.cppblog.com/vczh/archive/2008/10/19/64417.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Kernel FP 指令集</title><link>http://www.cppblog.com/vczh/archive/2008/10/11/63748.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Sat, 11 Oct 2008 10:10:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/10/11/63748.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/63748.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/10/11/63748.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/63748.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/63748.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 类型推导到这里也就结束了。虽然可能有点小bug，不过这个以后遇到再处理了。接下来的一个模块是跟类型推导没有耦合的新模块，两边可以平行处理。<br><br>Kernel FP的指令集不同于以往的指令集。因为作为一门纯函数式语言，就必须要有laziness。这就是说，凡是可以不运行的代码都一定不运行，凡是可以晚一点执行的代码一律等到需要的时候再执行。也就是说，参数传进函数的时候，传的是代码而不是值。因此指令集只能用来表达代码的逻辑结构。<br>&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/10/11/63748.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/63748.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-10-11 18:10 <a href="http://www.cppblog.com/vczh/archive/2008/10/11/63748.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Kernel FP let-in表达式子函数包含父函数对象的类型推导</title><link>http://www.cppblog.com/vczh/archive/2008/10/09/63505.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Wed, 08 Oct 2008 16:19:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/10/09/63505.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/63505.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/10/09/63505.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/63505.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/63505.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 有一些主函数的某些参数只在let-in表达式所定义的子函数使用，然后被主函数间接使用。今天修了一个bug支持了这种函数的类型推导。例子如下：&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/10/09/63505.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/63505.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-10-09 00:19 <a href="http://www.cppblog.com/vczh/archive/2008/10/09/63505.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Kernel FP 更多的类型推导</title><link>http://www.cppblog.com/vczh/archive/2008/10/08/63439.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Tue, 07 Oct 2008 16:10:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/10/08/63439.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/63439.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/10/08/63439.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/63439.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/63439.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 今天将Haskell的一部分列表处理函数抄进了Kernel FP里，坚持所有函数（模板函数）不写类型，而让编译器进行类型推导：&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/10/08/63439.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/63439.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-10-08 00:10 <a href="http://www.cppblog.com/vczh/archive/2008/10/08/63439.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Kernal FP所有表达式种类实现类型推导！</title><link>http://www.cppblog.com/vczh/archive/2008/10/06/63347.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Mon, 06 Oct 2008 14:47:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/10/06/63347.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/63347.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/10/06/63347.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/63347.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/63347.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 经过上一次的成功试验，这次终于完成了剩余的表达式类型的类型推导。过程及结果如下：&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/10/06/63347.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/63347.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-10-06 22:47 <a href="http://www.cppblog.com/vczh/archive/2008/10/06/63347.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Kernel FP 类型推导（Type Inference）实验成功！</title><link>http://www.cppblog.com/vczh/archive/2008/10/04/63257.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Sat, 04 Oct 2008 15:19:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/10/04/63257.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/63257.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/10/04/63257.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/63257.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/63257.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 我终于在实验阶段解决了这个困扰了我5个月（虽然实际上我花了3个星期）的问题。目标是这样的：你写程序，可以尽可能的不写一些类型信息，譬如函数参数和返回值的类型信息等。我的编译器帮你把它的类型算出来。<br><br>内详，有例子、方法和模型。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/10/04/63257.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/63257.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-10-04 23:19 <a href="http://www.cppblog.com/vczh/archive/2008/10/04/63257.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Kernel FP符号表完成</title><link>http://www.cppblog.com/vczh/archive/2008/10/02/63171.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Thu, 02 Oct 2008 15:46:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/10/02/63171.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/63171.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/10/02/63171.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/63171.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/63171.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 经过了5个小时的艰苦奋斗，符号表终于计算出来了，而且也做了一部分语法分析。接下来的工作是类型推导。今天的结果如下。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/10/02/63171.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/63171.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-10-02 23:46 <a href="http://www.cppblog.com/vczh/archive/2008/10/02/63171.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>