`
iyuan
  • 浏览: 470937 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
文章列表
原章节名直译应该是:“建立单元测试框架”,感觉有些唬人,为了不至于霸气侧漏,就借用了下多数编程语言教程中多少都会提笔带过的“单元测试”了。 其实作为初级教程,是否有必要在单元测试上过多着墨,就要见仁见 ...
一般来说,凡是带有自定义的东东都会显得很专业,不过在lisp中,这才算刚刚开始。至于你信不信,反正我是信了。就让我们开始吧。 说来有些不可理喻,宏之所以难以理解,是因为它在lisp中太过自然(天生的阿),运用起来毫不费力。以至于很容易被误解为一个有意思的函数。事实上,虽然宏真的很像函数,但仅仅是像而已。他们完全不在一个层面上,抽象的层次也大不相同。 一旦理解了宏和函数的区别,恭喜你,晋级了!你将会进入一个全新的层次(这个初等教材已经不适合你了)。不过,既然你还在看,那就让我们继续吧。唉,作者在这里讲了一个故事,就不罗嗦了,这个故事教育我们:如果,你会写宏,那么纵然你一天到晚不呆办公室,你的活 ...
一直在拖延,玩Lisp,终究绕不开这道坎啊。既然如此,抖擞下精神,开始了。 作者首先又是抱怨、比较了一番lisp的宏与其他语言的区别。从形式上来讲,其实所谓的标准宏就和c,java之类的类库一样,是事先已经被完成、验证过的东东封装在编译/虚拟环境 中供coder使用(省的重复造轮子)。当然,在lisp中,宏可不单单是如此简单,不过~管他呢(拜托,这只是初学者教程!)在这一章节主要给大伙介绍几个常用的宏。 条件宏 最常见的估计算是"if"了: (if condition then-form [else-form]) (if (> 2 3) "Yu ...
原本以为这章很好理解,结果..杯具了。 在lisp中,变量分为两种:词汇变量(lexical),动态变量(dynamic)。#感觉很别扭,估计我翻坏了,虽然与其他语言做了类比,相当于:局部变量和全局变量。可是看了后面,似乎不是这么个回事啊。如果有资深lisper能够给出这两个变量的专业名称(中文),那真是不胜感激了。目前,好吧,就姑且从字面上来称呼这两种变量吧。 作为变量的基本要素之一就是,变量可以持有一个值。而在Lisp中,甚至无所谓值的类型。很爽,但也会有麻烦:只有到了编译的时候才会发现这方面的错误。 最常见的定义变量方式之一: (defun foo (x y z) (+ x y z)) ...
定义一个新的函数 在Lisp中,通过宏defun以下面的结构来定义函数: (defun name (parameter*) "Optional documentation string." body-form*) 这里值得注意的是函数的命名规则(lisp的函数名支持短横等字符):如果函数的目的是由a转为b, ...
作为一本语言入门类书籍,终于要进入正题了!(不容易啊) 为什么满屏满目的括号? 这是一个问题么?对于初涉Lisp的人而言,是的。作者的解释就是不解释,熟悉了,你就懂了(好吧,其实是"详见后章")。总而言之,既然选择了,你就只能享受了(不许想歪!)。 与其他语言不同的是,lisp的编译器中有两个角色:reader和evaluator。reader负责把代码整成evaluator认识的东东,evaluator负责实现。(这里没太搞清楚,java什么的难道不是?或许神奇的宏在这儿做了些什么) Lisp中的基本元素有:列表(list)和原子(atom)。列表是指由括号括起的东东 ...
注意:如果你是初学者,甚至都没有其他任何语言基础,那么此篇,即<迷你数据库下>,可以略过,作为前两篇(上、中)的总结、优化,固然很强大,但个人感觉极有可能把初学者带到沟里去,这里涉及到一些较深的东西,并 ...
额,先简单申明下,由于本站code不支持lisp,而原先的代码着实不利于排版(太丑了),这里凡是代码部分都用python的格式,凡是输出部分都用java的格式~ 作为一个数据库,纵然再mini,也得要有最基本的功能:增删改查,本篇就逐一加上。 查 作为lisp代码,如果查找能类似这样: (select :artist "Dixie Chicks") 还是蛮不错的。自然,万能的宏已经准备好了类似的动作:REMOVE-IF-NOT,遍历列表,如果不符合要求则删除(不要担心,这里只是个副本,不会影响原数据),显示出的自然就是咱要的东西了。 试试看: 代码:(remove-if- ...
好家伙,这还是本人第一次碰到入门书籍刚hello完world,就讲到数据库这么复杂的东东,而且注意,这里不是怎么连数据库,而是怎样来制作一个数据库,OMG~ 或许作者也自知有些夸张(真的么?),本篇开始就申明:此章代码并不求甚解,很多东东自有后面的章节给出详解,这里只是通过具体的应用来加深对lisp的理解和感觉,当然如果学有余力深解下也无不可。 好吧,话不多说,本章的主体案例为:完成一个具有收录、评分功能的cd/music工具(另一种常见的经典案例是“通讯录”,话说在python的简明教程中,能做到这一步就恭喜成为一个pythoner了...) 根据功能,最基本的实现是要有个列表: *(li ...
在真正踏入lisp的世界前,如同选择lisp的分支一样,既然你选择了Common Lisp,那么,再劳驾选择下编译器吧~ 官方似乎比较强力的推荐Emacs,说法是:编辑、编译一体化。不过鉴于其整体构建于Elisp分支之上,并且对这款"神用 ...
其实,并不是第一次接触Lisp了,曾虎头蛇尾的研究过一阵(好吧,我承认是由于读了某些博文一时激情澎湃),最后不了了之。 之前做<zeromq初体验>的笔记,好几次就想停掉,重开一栏写lisp(作为zeromq半途而废的理由~),不过天使总算是打败了恶魔。 本来是不用写这笔记的,有位叫做"冰河"(也不晓得是不是那个传说中的冰河软件的作者)的牛人据说已经完成了整书的翻译并预计印刷发售了,不过从1月至今仍未找到哪儿有出售,so,按照计划,还是开始吧。 吸取了zeromq的教训,本系列直接定位为读书笔记,所以,万一 译本 发售,仍然是值得一读、一收的。原文看这里。 ...
服务器: // //  Clone server Model Six // //  Lets us build this source without creating a library #include "bstar.c" #include "kvmsg.c" //  Bstar reactor handlers static int s_snapshots  (zloop_t *loop, void *socket, void *args); static int s_collector  (zloop_t *loop,  ...
临时缓存 现实中,比如DNS服务器,可以算是一个典型案例。临时存储一个节点,如果节点小时,那么该存储也会随之灰飞,所以,"过期"也是一个靠谱的需求。 由于有新的需求提出,我们的key-value库也得做些相应的改动 ...
在发布/订阅模式中,特别是现实应用中,总会因为这样那样的问题导致订阅者丢失了所需的数据,如此,便有了重新获得的需求。通常来说,这个会由订阅者来完成,不过"千百个哈姆雷特"从工程的角度来看,实在不忍睹,完全违背了"复用"的概念。于是乎,"克隆模式"便呼之待出了。在发布端存储下这些消息,为了避免队列的堆积这样的杯具,也为了更好的订阅体验,kev-value似乎是不错的选择。 注意:这里的kev-value并非目前红火的nosql(虽然有些类似),可以理解成发布者的数据仓库(应该可以这么理解吧)。 为了简单明了,这里将会对整个机制做一个拆 ...
作为发布/订阅模式的一个常用场景,大数据量的组播是有必要的。虽然100k/s的数度对于zeromq实在稀松平常,不过,谁会介意更快呢。 模型图: 提高效率的核心在于充分利用硬件资源,比如多核的cpu,多线程即为此而生(可惜python没有)。 于是,上图的线程级模型就会变成这样: 需要注意的: 这里需要两个i/0线程 两张网卡(俩线程各用其一) 这俩还得各自独占一个cpu核,其他线程(worker)根据核数确定数量,并且同时都对应两个i/o线程做连接。 线程数最好不要大于cpu核数,不然,适得其反 。 额,竟然没有代码,单薄了些~ (未完待续)
Global site tag (gtag.js) - Google Analytics