<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>fleurer &#187; lisp</title>
	<atom:link href="http://www.fleurer-lee.com/tag/lisp/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.fleurer-lee.com</link>
	<description>rage and love, story of my life.</description>
	<lastBuildDate>Thu, 02 Sep 2010 11:07:00 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>lambda随笔</title>
		<link>http://www.fleurer-lee.com/2009/02/26/lambda%e9%9a%8f%e7%ac%94/</link>
		<comments>http://www.fleurer-lee.com/2009/02/26/lambda%e9%9a%8f%e7%ac%94/#comments</comments>
		<pubDate>Thu, 26 Feb 2009 06:40:06 +0000</pubDate>
		<dc:creator>ssword</dc:creator>
				<category><![CDATA[笔记]]></category>
		<category><![CDATA[FP]]></category>
		<category><![CDATA[lambda]]></category>
		<category><![CDATA[lisp]]></category>

		<guid isPermaLink="false">http://swdpress.cn/?p=645025</guid>
		<description><![CDATA[作为人类历史上第二门编程语言, lisp的语法是公认的简单了, 函数套函数, 括号套括号.  不谈应用, 学lisp就是为了娱乐的, 最有意思的东西莫过于lambda, 简单至极又无处不在, 而且几乎无所不能.
 
读过sicp的同学们都知道定义函数的define语句
 (define (func p1 p2) (&#8230;)) 
是(define func (lambda (p1 p2) (&#8230;)))的语法糖, 在lisp中, 函数就是个值, 跟普通变量一样可以传来传去. 
在当前作用域声明变量的define语句
 (define var1 val1)
又是let语句的缩写
 (let ((var1 val1)
   (var2 val2))
 (&#8230;))
而sicp中貌似没说, let语句实际上也就是lambda的语法糖
((lambda (var1 var2)
 (&#8230;) val1 val2)
可以说, lisp中所谓的变量都是参数的变形罢了.
 
如果高兴, 你可以用lambda来表示pair
 (define (cons x y) (lambda (f) (f x y)))
 (define (car pair) (pair (lambda [...]]]></description>
			<content:encoded><![CDATA[<p>作为人类历史上第二门编程语言, lisp的语法是公认的简单了, 函数套函数, 括号套括号.  不谈应用, 学lisp就是为了娱乐的, 最有意思的东西莫过于lambda, 简单至极又无处不在, 而且几乎无所不能.</p>
<p><span> </span></p>
<p>读过sicp的同学们都知道定义函数的define语句</p>
<p><span> </span>(define (func p1 p2) (&#8230;))<span> </span></p>
<p>是(define func (lambda (p1 p2) (&#8230;)))的语法糖, 在lisp中, 函数就是个值, 跟普通变量一样可以传来传去. </p>
<p>在当前作用域声明变量的define语句</p>
<p> (define var1 val1)</p>
<p>又是let语句的缩写</p>
<p><span> </span>(let ((var1 val1)</p>
<p><span> </span>  (var2 val2))</p>
<p><span> </span>(&#8230;))</p>
<p>而sicp中貌似没说, let语句实际上也就是lambda的语法糖</p>
<p>((lambda (var1 var2)</p>
<p><span> </span>(&#8230;) val1 val2)</p>
<p>可以说, lisp中所谓的变量都是参数的变形罢了.</p>
<p> </p>
<p>如果高兴, 你可以用lambda来表示pair</p>
<p><span> </span>(define (cons x y) (lambda (f) (f x y)))</p>
<p><span> </span>(define (car pair) (pair (lambda (x y) x)))</p>
<p><span> </span>(define (cdr pair) (pair (lambda (x y) y)))</p>
<p> </p>
<p>函数式编程的优势高阶函数与惰性编程可都是lambda带来的大礼. lambda返回一个函数而其中的语句并不会立即运行, 通过这一特性可以轻而易举地创造出无限长度的List以及很多不同的玩法, 具体内容请见sicp中关于流的那章.</p>
<p>用cons,car和cdr就可以构造出逻辑判断, 像这样:</p>
<p>(define new-true car)</p>
<p>(define new-false cdr)</p>
<p>(define (new-if condition exp1 exp2)</p>
<p>    (condition (cons exp1 exp2)))</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fleurer-lee.com/2009/02/26/lambda%e9%9a%8f%e7%ac%94/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
