从 Ruby 的 method_missing 到杂鱼 Common Lisp

5 月 7 日
阅读 5 分钟
58
运行到方法调用demo()时,由于该方法未定义,于是解释器会转而调用方法method_missing,并将相同的方法名(即demo)、参数列表等传递给它。其运行结果便是在标准输出中打印出now you see me这句话。
封面图

在 Lisp 中使用 reader macro 支持 JSON 语法

2023-05-23
阅读 3 分钟
874
Reader macro 是 Common Lisp 提供的众多有趣特性之一,它让语言的使用者能够自定义词法分析的逻辑,使其在读取源代码时,如果遇到了特定的一两个字符,可以调用相应的函数来个性化处理。此处所说的“特定的一两个字符”,被称为 macro character,而“相应的函数”则被称为 reader macro function。举个例子,单引号'就是一...
封面图

使用 call/cc 实现计数循环

2023-05-07
阅读 3 分钟
918
计数循环就是从一个数字$i$开始一直遍历到另一个数字$j$为止的循环过程。例如,下面的 Python 代码就会遍历从 0 到 9 这 10 个整数并逐个打印它们
封面图

如何在CommonLisp中解析命令行参数

2022-08-21
阅读 7 分钟
1.3k
clingon 是一个 Common Lisp 的命令行选项的解析器,它可以轻松地解析具有复杂格式的命令行选项。例如,下面的代码可以打印给定次数的打招呼信息
封面图

自己动手打印整数

2022-05-02
阅读 6 分钟
1.3k
在 Common Lisp 中,打印整数一般用函数format。例如,上面的代码会往标准输出中打印出233这个数字: {代码...} 除此之外,format还可以控制打印内容的宽度、填充字符、是否打印正负号等方面。例如,要控制打印的内容至少占据6列的话,可以用如下代码 {代码...} 如果不使用字符串形式的 DSL,而是以关键字参数的方式来实...
封面图

关于为什么Java是单派发以及Common Lisp又伟大了一次的这档子事

2021-10-16
阅读 4 分钟
2.3k
基于子类型的多态要求在程序的运行期根据参数的类型,选择不同的具体方法——例如在上述例子中,当方法letsHear中调用了参数a的方法talk时,是依照变量a在运行期的类型(第一次为Cat,第二次为Dog)来选择对应的talk方法的实例的,而不是依照编译期的类型Animal。
封面图

直观地了解自己每天在吃上面的开销

2021-10-06
阅读 6 分钟
1.9k
众所周知,我用Emacs的ledger-mode来记账(参见以前的文章《程序员的记账工具——ledger与ledger-mode》)。作为一个出色的命令行报表工具,ledger的命令balance和register足以涵盖大部分的使用场景:
封面图

git-log很好,你也可以写一个.

2021-09-04
阅读 5 分钟
1.9k
序言作为一个天天都在用的工具,各位同行想必都非常熟悉 Git 的基本用法,例如:用git-blame找出某一行 bug 是哪一位同事引入的,由他背锅;用git-merge把别人的代码合进自己完美无瑕的分支中,然后发现单元测试无法跑通;用git-push -f把团队里其他人的提交通通覆盖掉。除此之外,Git 其实还是一个带版本功能的键值数据...
封面图

这方面Python还是比Lisp略逊一筹

2021-08-12
阅读 4 分钟
2.1k
众所周知,Python 支持向函数传递关键字参数。比如 Python 的内置函数max就接受名为key的关键字参数,以决定如何获取比较两个参数时的依据
封面图

模拟Python中小于运算符的短路特性

2021-06-26
阅读 3 分钟
1.4k
Also unlike C, expressions like a < b < c have the interpretation that is conventional in mathematics
封面图

从AOP到method-combination

2021-06-14
阅读 5 分钟
2.1k
“实战Elisp”系列旨在讲述我使用Elisp定制Emacs的经验,抛砖引玉,还请广大Emacs同好不吝赐教——如果真的有广大Emacs用户的话,哈哈哈。

非递归遍历二叉树到底有什么用

2021-05-03
阅读 5 分钟
1.6k
准备过互联网公司的服务端岗位面试的人,对于二叉树的三种遍历方式想必是如数家珍。假设以类BinaryTree定义一棵二叉树 {代码...} 实现一个前序遍历的算法便是信手拈来的事情 {代码...} 随着行业曲率的增大,要求写出不使用递归的版本也没什么过分的 {代码...} 一直以来,我觉得这种用一个显式的栈来代替递归过程中隐式的...

当你SET的时候,Redis到底在SET些什么

2021-04-17
阅读 4 分钟
1.1k
准备过互联网公司的服务端岗位面试的人,对Redis中的5种数据类型想必是如数家珍。而网上很多面试题里也会出现这道题目随着行业曲率的增大,光是知道有这些数据类型已经不够了,还得知道同一个类型也有不同的底层数据结构。例如同样是string类型,不同内容或不同长度会采用不同的编码方式: {代码...} 而hash类型也有两种...

多重返回值的阵营九宫格

2021-03-14
阅读 5 分钟
2.7k
通常在糊业务代码的时候,不管是函数、方法,还是宏,都只会有一个返回值。比如在C语言用于检查一个字符是否为阿拉伯数字的isdigit函数就只会返回是(1)或否(0)

终端看片指日可待——ASCII转义序列的妙用

2021-02-27
阅读 5 分钟
1.8k
其中用到的是ASCII转义序列\x1b[8D和\x1b[0K。除此之外,ASCII转义序列还有许多其它功能。例如,可以用来定制输出内容的前景色

只有lisp能做——欧拉计划第66题

2021-02-11
阅读 5 分钟
5.3k
欧拉计划(Project Euler)就像LeetCode,是一个编程答题的网站。不同于LeetCode的是,欧拉计划只要求用户提交最终答案即可(一般是一个数字),而不需要完整代码。因此,可以尽情地使用自己喜欢的编程语言——不少题目甚至光靠笔和纸便能解决。

format,不只是格式化

2021-01-30
阅读 6 分钟
2.7k
《实战Common Lisp》系列主要讲述在使用Common Lisp时能派上用场的小函数,希望能为Common Lisp的复兴做一些微小的贡献。MAKE COMMON LISP GREAT AGAIN。

年轻人的第一个VSCode扩展

2021-01-02
阅读 3 分钟
9k
入坑VS Code前,我已经是一名久经考验的Emacs老用户了,因此开始正式使用VS Code后,我第一时间启用了它的Emacs Keymap。但不久我便发现,这套键映射缺少一个重要的快捷键——ctrl-l。

自己动手丰衣足食——用Hammerspoon控制Emacs的窗口

2020-12-20
阅读 4 分钟
2.6k
有一天,我用Homebrew安装了一些软件——因为已经是一个月前的事情了,所以已经记不清是安装了什么。安装后并没有立即出现什么问题,只是又过了两天我重新启动电脑后,发现同样是由Homebrew安装的Emacs不由分说地无法启动了。这下可麻烦了,毕竟我是org-mode的重度使用者,还需要偶尔用SLIME写点Common Lisp的代码,而它们...

一箭双雕——org-mode中的ID和CUSTOM_ID字段

2020-11-19
阅读 2 分钟
2.8k
在org-mode中,一个条目(entry)可以设置多个属性(Properties)。有的属性是org-mode内置的,有它们的特殊用途。有的属性是自定义的,用在一些插件或仅仅用于记录信息。CUSTOM_ID属于前者,而ID属性后者。

精确之美——用TikZ画硬盘示意图

2020-10-29
阅读 9 分钟
4.8k
备考某等级考试的时候,在教材中碰到了几个一直不太理解的、关于硬盘的概念:磁道、柱面号、扇区。然而教材没有配图,无法直观地了解这些概念的物理形态。维基百科的硬盘词条页中倒是有一副不错的示意图,我截图搬运了过来

重定向的时候shell在干什么?

2020-05-23
阅读 3 分钟
1.7k
“究竟在干什么”是一系列关于软件背后运作原理的文章,每一篇文章旨在讲解一些在日常编程实践中常见但可能并不为人所熟知的技术细节,抛砖引玉,期待激发读者朋友的更多思考。

程序员特有的画图方式——语绘工具小入门.

2020-05-07
阅读 5 分钟
8.9k
黑客与画家 虽然程序员多数时候都在与字符打交道,但偶尔也会像建筑或制造业的工程师一样,画一些图,比如: 为了表达多个系统如何协作以实现业务需求,会画时序图; 为了表达存储到数据库中的业务实体间的关系,会画ER图; 为了表达复杂的业务实体在整个生存期中状态的变化,会画状态图。 除此之外,还有流程图、甘特图...

你或许不知道,shell不能比较大小

2020-04-27
阅读 3 分钟
1.4k
“究竟在干什么”是一系列关于软件开发过程中背后运作原理的文章,每一篇文章旨在讲解一些在日常编程实践中常见但可能并不为人所熟知的技术细节,抛砖引玉,期待激发读者朋友的更多思考。

数据库schema不是CRUD服务的一切

2020-04-14
阅读 3 分钟
1.9k
受疫情影响呆在家中的这段时间里,我收尾了《Clean Architecture》。这本书给了我许多新知识和启发,包括本文的中心论点——数据库schema不是CRUD服务的一切,也是在读书过程中想到的。在书中,作者的原话是

改良在Emacs中浏览笔记的方式

2020-03-29
阅读 4 分钟
1.4k
“实战Elisp”系列旨在讲述我使用Elisp定制Emacs的经验,抛砖引玉,还请广大Emacs同好不吝赐教——如果真的有广大Emacs用户的话,哈哈哈。

我是怎么把笔记导入ElasticSearch的

2020-03-26
阅读 3 分钟
1.1k
尽管我最近开始用VNote做读书或读在线文档的笔记,但更多的时候,我把经验型知识都记录在一个名为my_note的Git仓库中。这个仓库中有许多.org文件:

弥补org-refile的不足

2020-03-21
阅读 2 分钟
2.2k
“实战Elisp”系列旨在讲述我使用Elisp定制Emacs的经验,抛砖引玉,还请广大Emacs同好不吝赐教——如果真的有广大Emacs用户的话,哈哈哈。

程序员的记账工具——ledger与ledger-mode

2020-03-19
阅读 4 分钟
8.7k
上大学后不久我开始用挖财记账,当时记得很随意,不会去追究一些不知道花在哪里的钱,不时就要强行修正账户余额,就这么一直用到了2019年中。后来挖财的启动时间越来越长,同时我不想看启动时的广告,便动了换记账软件的念头。

优化org-mode管理观影进度

2020-02-21
阅读 3 分钟
1.9k
“实战Elisp”系列旨在讲述我使用Elisp定制Emacs的经验,抛砖引玉,还请广大Emacs同好不吝赐教——如果真的有广大Emacs用户的话,哈哈哈。