<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[hrcnpc的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/hrcnpc</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; hrcnpc]]></copyright><item><title><![CDATA[写给程序员的编程语言科普——（一）解释器的基本工作流程和构造方法]]></title><link>https://blog.youkuaiyun.com/hrcnpc/article/details/22993751</link><guid>https://blog.youkuaiyun.com/hrcnpc/article/details/22993751</guid><author>hrcnpc</author><pubDate>Sat, 05 Apr 2014 19:54:26 +0800</pubDate><description><![CDATA[在这篇文章里我将介绍常见的解释器主要的工作流程，由于一个解释器通常有很多复杂的细节，在这里我仅仅是进行一些粗略的介绍。此外我将介绍人们通常是用怎样的方法来构建一个想要的解释器的。关于为什么我只介绍解释器而不介绍编译器的原因，请参见前言部分。

在上一篇文章里我曾经提到过，不论是解释器还是编译器，在运行的初期都需要做两件事：逐字逐句地解析程序员写的代码，并将其转换为一种内部的数据结构。做这些工作]]></description><category></category></item><item><title><![CDATA[写给程序员的编程语言科普——前言]]></title><link>https://blog.youkuaiyun.com/hrcnpc/article/details/22993691</link><guid>https://blog.youkuaiyun.com/hrcnpc/article/details/22993691</guid><author>hrcnpc</author><pubDate>Sat, 05 Apr 2014 19:51:13 +0800</pubDate><description><![CDATA[就在前两个月，王垠的博客网站关闭了一段时间，并在重新开启时删除了所有旧文章，理由可以从他新发的版权声明中见到。对于王垠对待某些网站、某些网民以及他自己过往文章的态度，我不置可否。但至少一点让我感到惋惜的是我失去了一个非常好的学习机会。所幸他的多数博文我在网站关闭前都大致看过一遍，虽说被有一一细细品读也算是一种安慰了吧。

我写这篇文章以及接下来的一系列文章的目的是希望向国内广大程序员们进行一些]]></description><category></category></item><item><title><![CDATA[设计递归数据类型接口的原则]]></title><link>https://blog.youkuaiyun.com/hrcnpc/article/details/18404727</link><guid>https://blog.youkuaiyun.com/hrcnpc/article/details/18404727</guid><author>hrcnpc</author><pubDate>Fri, 17 Jan 2014 12:49:38 +0800</pubDate><description><![CDATA[为数据类型中的每种数据都提供一个构造者。为数据类型中的每种数据都提供一个判定者（predicate）。为传递进此数据类型的构造者的每一个数据都提供一个提取者（extractor）。]]></description><category></category></item><item><title><![CDATA[术语]]></title><link>https://blog.youkuaiyun.com/hrcnpc/article/details/18404711</link><guid>https://blog.youkuaiyun.com/hrcnpc/article/details/18404711</guid><author>hrcnpc</author><pubDate>Fri, 17 Jan 2014 12:48:47 +0800</pubDate><description><![CDATA[语法分类（syntactic categories）：在语法定义中::=左侧定义的集合。

语法推导（syntactic derivation）：证明某个给定的数据的值是集合的一个成员的过程。

约束变量（bound variable）：lambda演算中的唯一参数。

inlining技术：将仅出现一次的定义转化为域内的内建变量。

数据抽象（data abstraction）技]]></description><category></category></item><item><title><![CDATA[过程化表示抽象数据的原则]]></title><link>https://blog.youkuaiyun.com/hrcnpc/article/details/18404699</link><guid>https://blog.youkuaiyun.com/hrcnpc/article/details/18404699</guid><author>hrcnpc</author><pubDate>Fri, 17 Jan 2014 12:48:06 +0800</pubDate><description><![CDATA[若要表示的数据是一个函数集合，那么我们可以用具体应用时的行为来表示它。在这种情形下，我们可以遵循以下规则来提取接口和过程化的表示：


找出用例（client code）中能够求值并返回所需类型的lambda表达式。为每个这样的lambda表达式创建一个构造过程。构造过程的参数将是此lambda表达式的自由变量。将用例中的每个这样的lambda表达式替换成对相应的构造器的调用。定义一个类似于]]></description><category></category></item><item><title><![CDATA[学习解释器的3个理由]]></title><link>https://blog.youkuaiyun.com/hrcnpc/article/details/18404679</link><guid>https://blog.youkuaiyun.com/hrcnpc/article/details/18404679</guid><author>hrcnpc</author><pubDate>Fri, 17 Jan 2014 12:47:19 +0800</pubDate><description><![CDATA[有时你自己需要实现一个解释器。一些程序虽然不是解释器，却有类似于解释器的部分。软件愈加复杂的趋势使得程序与解释器之间的差距变小。]]></description><category></category></item><item><title><![CDATA[撰写归纳定义的数据结构的原则]]></title><link>https://blog.youkuaiyun.com/hrcnpc/article/details/18404661</link><guid>https://blog.youkuaiyun.com/hrcnpc/article/details/18404661</guid><author>hrcnpc</author><pubDate>Fri, 17 Jan 2014 12:46:19 +0800</pubDate><description><![CDATA[当定义一个操作归纳定义的数据结构的过程时，程序的结构应当以该数据结构为模式。

进一步解释：


为语法中的每一个非终结符号撰写过程。该过程必须处理非终结符号对应的数据，而不处理其它数据。在每个过程中，撰写该非终结符号对应的归纳的一个分支。你可能需要额外的用例结构，但这是你的开始。对每个出现在右侧的非终结符号，对它写一个操作此非终结符号的过程的递归调用。]]></description><category></category></item><item><title><![CDATA[解释器的原则（Recipe）]]></title><link>https://blog.youkuaiyun.com/hrcnpc/article/details/18404641</link><guid>https://blog.youkuaiyun.com/hrcnpc/article/details/18404641</guid><author>hrcnpc</author><pubDate>Fri, 17 Jan 2014 12:45:11 +0800</pubDate><description><![CDATA[查看一段数据。确定这段数据表示的是哪一种类型的数据。取出数据中的元素并对它做正确的事。]]></description><category></category></item><item><title><![CDATA[Racket中的define、let和let*]]></title><link>https://blog.youkuaiyun.com/hrcnpc/article/details/17754183</link><guid>https://blog.youkuaiyun.com/hrcnpc/article/details/17754183</guid><author>hrcnpc</author><pubDate>Thu, 02 Jan 2014 12:40:12 +0800</pubDate><description><![CDATA[在Racket中，define和let都可以进行局部变量的绑定，但用法有所区别：
define是单独地绑定一个变量，在此后与define同一级的域中可以引用此变量。
let可以一次性绑定多个变量，但绑定后的变量仅可在let自己的域中使用。
举个例子来说明：若在一个函数中绑定一个函数，再将它输出，如果用define的话：
(define (foo)
  (define name "Tom")]]></description><category></category></item><item><title><![CDATA[【代码片断】Racket中的写文件]]></title><link>https://blog.youkuaiyun.com/hrcnpc/article/details/17719119</link><guid>https://blog.youkuaiyun.com/hrcnpc/article/details/17719119</guid><author>hrcnpc</author><pubDate>Tue, 31 Dec 2013 17:55:00 +0800</pubDate><description><![CDATA[(define out (open-output-file some-file))
> (write "hello world" out)
> (close-ouput-port out)]]></description><category></category></item><item><title><![CDATA[【文档】Racket中的并发与并行]]></title><link>https://blog.youkuaiyun.com/hrcnpc/article/details/17718947</link><guid>https://blog.youkuaiyun.com/hrcnpc/article/details/17718947</guid><author>hrcnpc</author><pubDate>Tue, 31 Dec 2013 17:48:11 +0800</pubDate><description><![CDATA[Racket支持程序中的多线程控制、线程本地存储、一些基元同步机制、以及一个用于组成同步抽象的框架。此外，racket/future和racket/libraries提供并行支持以提升性能。


10.1 线程
参见Threads章节了解Racket线程模型的基本信息。同时请参见Futures章节。
当线程被创建起来时，它会被放在当前监护者（current custodian）的管理之下]]></description><category></category></item><item><title><![CDATA[C语言读取BMP文件头、信息头及像素信息]]></title><link>https://blog.youkuaiyun.com/hrcnpc/article/details/8689986</link><guid>https://blog.youkuaiyun.com/hrcnpc/article/details/8689986</guid><author>hrcnpc</author><pubDate>Tue, 19 Mar 2013 08:50:25 +0800</pubDate><description><![CDATA[本学期的实验之一，看网上许多文章关于读取像素的处理并不是很完整，就放上来一个。
/*****************************************************
 * usage:
 *****************************************************/
#include 
#include 
typedef unsigned s]]></description><category></category></item><item><title><![CDATA[iOS中的ScrollView]]></title><link>https://blog.youkuaiyun.com/hrcnpc/article/details/8566442</link><guid>https://blog.youkuaiyun.com/hrcnpc/article/details/8566442</guid><author>hrcnpc</author><pubDate>Sun, 03 Feb 2013 09:43:54 +0800</pubDate><description><![CDATA[概览
       UIScrollView类为显示大于应用程序窗口的内容提供支持。它使得用户可以使用滑动手势来滚动，并可以使用扩张/收缩手势来放大缩小部分内容。
       UIScrollView是包括UITableView和UITextView在内的多个UIKit类的父类。
       UIScrollView对象（或者简单地称为滚动视图）的中心思想是一个在它的内容视图中可调整的原]]></description><category></category></item><item><title><![CDATA[信息论计算器]]></title><link>https://blog.youkuaiyun.com/hrcnpc/article/details/8278431</link><guid>https://blog.youkuaiyun.com/hrcnpc/article/details/8278431</guid><author>hrcnpc</author><pubDate>Mon, 10 Dec 2012 15:53:54 +0800</pubDate><description><![CDATA[应用链接：点击打开链接
这学期在学信息论，算里面的信息熵那叫一个蛋疼！于是想自己写个应用解决这个问题，应用全用JavaScript写成的，计算精度到0.01左右，喜欢的朋友们可以去看看哈！]]></description><category></category></item><item><title><![CDATA[解决Quicktime Player X的崩溃问题（以及QuickTime的重装问题）]]></title><link>https://blog.youkuaiyun.com/hrcnpc/article/details/8229943</link><guid>https://blog.youkuaiyun.com/hrcnpc/article/details/8229943</guid><author>hrcnpc</author><pubDate>Tue, 27 Nov 2012 14:34:57 +0800</pubDate><description><![CDATA[前段时间Quicktime Player X突然出问题了。启动APP还没事，但一打开文件或者新建录制之类的就马上崩溃。一心急就想用App Zapper把Quicktime卸了再装。发现苹果公司不提供最新版的Quicktime Player X的安装包（理由是Quicktime Player X已经内嵌于OSX 10.7以上的系统中了OTZ）。
Google之后找到了解决办法……下载一个mac O]]></description><category></category></item><item><title><![CDATA[iOS6中关于切换（segue）viewController产生的问题]]></title><link>https://blog.youkuaiyun.com/hrcnpc/article/details/8159127</link><guid>https://blog.youkuaiyun.com/hrcnpc/article/details/8159127</guid><author>hrcnpc</author><pubDate>Wed, 07 Nov 2012 19:17:48 +0800</pubDate><description><![CDATA[在学《iOS5应用开发 入门经典》这本书的时候发现的一个问题，在第12章中，有一个场景切换的例子。由于需要记录viewController切换时的信息，这个例子使用了手动调用了viewController的performSegueIndentifier: id sender:sender方法，在类中声明了一个属性dateChooserVisible，用于判断另一场景是否显示，代码如下：

-]]></description><category></category></item><item><title><![CDATA[解决ios6中UIScrollView不能滚动的问题]]></title><link>https://blog.youkuaiyun.com/hrcnpc/article/details/8157152</link><guid>https://blog.youkuaiyun.com/hrcnpc/article/details/8157152</guid><author>hrcnpc</author><pubDate>Wed, 07 Nov 2012 18:54:25 +0800</pubDate><description><![CDATA[在iOS6中，如果像旧版本的资料提到的那样，用IB将一个ScrollView拖到.h文件中创建一个outlet，并在viewDidLoad函数中设置ScrollView的contentSize属性的话，会发现运行的程序中ScrollView可见，但无法拖动。这是因为iOS6中的AutoLayout机制，在viewDidLoad函数被执行后，AutoLayout会重新把contentSize修改为符]]></description><category></category></item><item><title><![CDATA[关于TabActivity＋ViewFlipper组合使用出现的问题]]></title><link>https://blog.youkuaiyun.com/hrcnpc/article/details/7796848</link><guid>https://blog.youkuaiyun.com/hrcnpc/article/details/7796848</guid><author>hrcnpc</author><pubDate>Sat, 28 Jul 2012 16:00:56 +0800</pubDate><description><![CDATA[今天在一个TabAcitivity的其中一个标签加入ViewFlipper进行局部的view切换时发现运行时通过在Acitivity的OnTouchEvent方法中设定的切换效果没有实现。通过syso大法发现，MotionEvent.ACTION_DOWN被触发了，而MotionEvent.ACTION_UP没有被触发。百度后发现，原来是return时直接return了父方法（return sup]]></description><category></category></item></channel></rss>