Deep Thought
I am so happy to be writing this.
```
Pollen 的灵活性体现在自定义标签(custom tagst),比如图片写作 `◊image["图片地址"]{图片描述}` 而链接写作 `◊link["链接地址"]{链接文本}`(*Org Mode 正在攻击我,但是混杂着 Markdown 和奇怪的东西*),`image` 和 `link` 可以换成自己定义的函数。
可以用类似的方式定义如何把某个标签转换为 X-expression:
```racket
(define (image url alt)
`(img ([alt ,alt] [src ,url])))
```
之后就可以把 X-expression 转化为 HTML,或者 PDF 等任何文档格式。在我看来,Pollen 有点像是 [Pandoc](https://pandoc.org/),可以自己编写某个语言的 Reader 和 Writer,前者用于把源语言转换为 AST(抽象语法树),后者把 AST 转换为目标语言,不过对 Pollen 而言,Lisp(X-expression)充当了 AST 的作用。
另外 Pollen 可以一边定义语法一边写文,说实话,看起来很爽。
```racket
#lang pollen
◊(define ($ . xs)
`(mathjax ,(apply string-append `("$" ,@xs "$"))))
◊(define ($$ . xs)
`(mathjax ,(apply string-append `("$$" ,@xs "$$"))))
◊h1{I wonder if ◊${2^{\aleph_\alpha} = \aleph_{\alpha+1}}?}
```
这篇文章还介绍了 Alain Marty 的 Lambda Talk,不过引用的两个链接都需要 JavaScript 才能加载内容,我拒绝为了读文档而加载 JavaScript,加上这个标记语言看起来也没有特别吸引我的地方,所以就没有去了解了。作者还提出用 Tcl 这门不需要括号和引号的**编程**语言来写文档,也是有趣的实践,而且编程语言无疑要比标记语言灵活得多。
作者还讨论了在 Markdown 里插入代码的方法(不是代码块),首先排除了 MDX(本质上是 Markdown 加上 JSX 这个邪恶的东西),需要 Node.js 才能运行;又排除了 Org Mode,原因如下:
> Org-mode 相对 markdown 有更多的功能以及根植于 Emacs 的可扩展性。然而正是因为 Org-mode 功能太丰富我才选择扩展 Markdown——扩展的平台必须足够简单,才能让扩展完的成果保持简单。
>
> 当然,Org-mode 只有在 Emacs 中才能获得良好体验也是我选择 Markdown 的原因之一。
作者目前的解决方案是使用 Pandoc filter,这其实就是在对 Pandoc Reader 解析得到的 AST 做处理,比如把标记为 `mermaid` 的代码块转换为 SVG 代码再由 Pandoc Writer 输出为指定格式。我由于使用 Hugo 写博客,所以短代码(shortcode)在大多数时候就够用了,不过体验上是没有 Pollen 一边造语法一边写文的体验爽的,也没有 Pandoc 那样的兼容性。
很有意思的文章,说不定哪天我真的开始用 Lisp 写文章了呢。
### 用 (Neo)vim 写 Lisp
> [!note] 📜
> [Lisp in Vim](https://susam.net/lisp-in-vim.html)
书接上文,前面说到 Org-Mode 只有在 Emacs 中才能获得良好体验,而 Lisp 也非常适配 Emacs,毕竟这个编辑器的核心就是一个 Emacs Lisp 解释器(或者说 REPL?)。不过,我非常固执,始终不太愿意选择 Emacs(兴许会用 Emacs 写文或者记笔记,但写代码我还是更喜欢 (Neo)vim),幸好 Vim 也可以通过插件和配置得到很好的 Lisp 编辑体验。
要获得良好的 Lisp 编程体验,需要两个工具:
1. 用于编辑 S-expression 的结构化编辑功能(否则就真的 *Lost In Stupid Parentheses* 了)
2. 内嵌 REPL[^1] 以实现交互式编程(否则和非 Lisp 语言还有什么区别)
作者在文章中介绍了如何使用 Vlime(类似于 Emacs 的 SLIME,用于交互式编程)和 Paredit(括号编辑,或者说结构化编辑)。前者本质上是启动了一个服务器,这个服务器运行 REPL,接收来自编辑器的表达式,计算表达式后返回值给编辑器。比如,在 Vim 里选中 `(+ 1 2)`,执行 Eval 操作,Vlime 就会把这个字符串发送给 REPL 服务器,然后得到返回值 `3` 显示出来。
这有点像 LSP(语言服务器协议):编辑器把代码发送给语言服务器,然后把语言服务器分析得到的警告、报错和优化建议显示给用户。REPL 不仅仅是计算表达式的值那么简单,如果把一个函数定义发送给 REPL,它就会记住它,在同一个会话下,可以在之后的 Eval 操作里直接使用这个函数。这就是交互式编程,可以直接对 S-expression 求值,不需要手写 `print` 或者 `console.log` 之类的。
不过 Vlime 有点老了,而且是给 Vim 写的。对于 Neovim 用户,可以选择用 Fennel(用来写 Lua 的 Lisp 方言)实现的 [Conjure](https://github.com/Olical/conjure),这个插件甚至还能实现 Lua、Python 和 SQL 等语言的交互式编程。
至于 Paredit,我的选择是 [nvim-paredit](https://github.com/julienvincent/nvim-paredit) 插件,Paredit 的实现大概都没有太多区别。不过,我还没有细细研究过 Paredit 的各种操作(因为文档太长了懒得看),目前觉得编写 Lisp 代码必不可少的有这些操作。Slurp(吞参数),把括号外面的一个形式(form,也就是一个括号和括号里面的所有东西)吸到括号里面来,可以吸前面的也可以吸后面的;相对应的有 Barf(吐参数),不必解释。这两个操作在 `nvim-paredit` 里的快捷键是 `>)`(吞后面的参数)、`<(`(吞前面的参数、`<)`(把参数吐到后面)和 `>(`(把参数吐到前面)。
另一个常用操作是选中整个形式,复制和删除代码的时候很好用,进入 `VISUAL` 模式后按下 `af` 即可。其他的操作我就用得比较少了,或许我该找时间仔细读一读 Paredit 的文档了。顺带一提,适应 Lisp 里形式的概念之后会发现很多有趣的操作,比如 Clojure 可以用 `#_(...)` 注释一个形式里的代码,我第一次发现的时候觉得简直是天才的设计,毕竟 Lisp 同一行里有很多前几行代码的反括号,注释一整行会出现问题。
大概就是这样,如果你是 Vim 用户,想要编写 Lisp 代码的话,可以参考作者的配置,使用 Vlime 和 Paredit;如果你用是的 Neovim,理论上也可以使用前两个插件,是兼容的,但我推荐你试试 Conjure 和 `nvim-paredit`。
### 为什么免费的东西让人失智?
> [!note] 📃
> [Why free stuff makes us irrational](https://thehustle.co/why-free-stuff-makes-us-irrational)
作者列举了两次由免费试吃引发的事故,比如老人指责年轻人吃了太多试吃小样让其他人没得吃,然后被锤了一拳,还有两个九十多岁的老年人也因为超市试吃发生了口角。不仅如此,作者还引用了一些研究,从行为经济学的角度解释,人们就是会因为某件商品的价格是免费的而做出不理智的消费决策。
不理智是指,即便不免费的商品更好,人们也普遍倾向于选择免费的。免费的巧克力,和只要一毛钱(美元)的巧克力,哪怕后者品质更好,大多数人都会选择前者;当免费的巧克力价格变成一分钱,不再免费,人们又会更倾向于后者。另一个例子是运费,哪怕有更划算但需要支付运费的商品,人们也更倾向于选择免运费的商品,然而选择需要支付运费的商品,消费者还能省几块钱。
对此的解释是,人们在看到某件商品免费时会产生一种「良好的感觉」,这种感觉驱使我们做出不理性的消费决策。如今更常见的例子是互联网媒体和社交媒体,只有很少的人会为内容(比如说新闻)付费,甚至大家理所应当地认为这些东西就应该是免费的,永远不会给这些东西付钱(当然这并不是因为他们是海盗党或者 Copyfarleft),还有社交媒体,人们已经习惯了免费使用,忍受大量广告和垃圾信息的商业模式了(*联邦宇宙居民就这么静静地看着你们*)。
顺带一提,文中还列举了免费试吃带来的购买率提升,令人震惊,原来这种商业行为这么有效……
### 喝咖啡对口腔有伤害吗?
> [!note] 📺
> [喝咖啡怎么让我的嘴变臭了? - Bilibili](https://www.bilibili.com/video/BV1H29KB9E28/)
我一直知道茶和咖啡喝多了会让牙齿变黄,所以有注意勤刷牙,第一次知道咖啡还会影响口气。不过值得庆幸的是,咖啡并不会对口腔健康造成实际的伤害,咖啡中的某种物质会让牙釉质在短时间内变软,变软的期间就更容易被着色,也更容易受到伤害,所以喝完咖啡之后及时漱口就能就减少色素残留。不过,要等待至少半个小时才能刷牙,因为牙釉质在喝了咖啡后变软。
事实上,喝咖啡不仅不会对口腔直接造成伤害,还具有一定的保护作用。研究发现长期规律引用黑咖啡的人更不容易得蛀牙,这似乎是咖啡里的某种物质造成的效果。不过前提是不往咖啡里加糖和牛奶,糖是助长蛀牙的罪魁祸首。
*一天喝两杯手冲咖啡的我满意地离去。*
### 《洛丽塔》的文化影响
> [!note] 📻
> [《洛丽塔》应该被禁吗?](https://www.xiaoyuzhoufm.com/episode/69cd3206e2c8be3155236692)
文不对题似乎是树老师的常规操作(毕竟她自称懂得传播学,相信修辞的力量),总之,这期博客并没有在讨论是否应该封禁《洛丽塔》这本书,仅仅是文学分析。*我最爱的文学系列终于更新啦!*
《洛丽塔》是俄裔美国作家纳博科夫 1955 年的作品,从一个恋童癖、强奸犯兼杀人犯的视角讲述了他的故事。他的名字叫作亨伯特·亨伯特,在 13 岁时他爱上了 12 岁的安娜贝尔,可不久后他的初恋对象因伤寒而早逝,童年阴影让他对爱情的印象永远留在了那一刻;另一种对他恋童癖身份的解释是,他生来就是恋童癖,这是根治在他人格里的东西。作者没有说哪种诠释是对的,而是让读者自行选择。
小说的主要情节是 38 岁的亨伯特·亨伯特对 12 岁的多洛莉丝的爱恋,他给他起昵称为「洛丽塔」。为了接近少女,亨伯特·亨伯特迎娶了多洛莉丝的母亲,她的母亲发现亨伯特·亨伯特的真实意图之后,准备寄信给还在夏令营的多洛莉丝告知真相,却因车祸死在了路上。随后亨伯特·亨伯特和多洛莉丝开启了一场跨越美国的公路旅行,被描述得十分浪漫,当然,亨伯特·亨伯特在旅行途中与她无数次发生关系。多洛莉丝长大后逃脱了继父,后来还结婚生子。三年后两人再次相遇,亨伯特·亨伯特向多洛莉丝表明了爱意,但多洛莉丝只把他当作父亲。亨伯特伤心欲绝,杀死了三年前带走多洛莉丝的男人奎迪,因杀人罪被捕,最后病死狱中。
小说叙事的一大特点是:叙述者是不可靠的。讲述这个故事的是亨伯特·亨伯特本人,他当然会将恐怖的强奸浪漫化为爱情,他描述的多洛莉丝也不会是多洛莉丝本人,而是他幻想出来的「洛丽塔」。
这本犯罪心理小说有极大的文化影响力,许多名人都公开讨论它,也有电影改编了这部小说,很多其他的文化作品也受其影响,二次元文化中的「萝莉」一词就来自这本小说。尽管「萝莉」与恋童癖并无关系,但名字的确来源于此,骇人听闻的「萝莉岛」倒是和《洛丽塔》这本书十分相似。这本书尽管在一开始就将书中描绘的关系称作不道德的,但世界上著名的恋童癖罪犯最爱的书就是这一本,一些女性甚至把《洛丽塔》当作浪漫爱情故事来读,毕竟亨伯特描绘的公路旅行的确具有浪漫色彩,但那是一个犯人、一个不可靠的叙述者的第一人称叙事。
小说叙事方式令人不适的一点在于,亨伯特·亨伯特十分真诚,当读完他的自述之后,读者甚至可能对这名恋童癖犯人表示理解。我想起《无耻之徒》这部美剧中也有对恋童癖的描述,剧中的一群人得知社区里搬来了一个恋童癖性骚扰犯,操着棍棒赶到门口想把对方赶出去,可门打开之后,他们发现那个犯人是个女人,那个女人含着泪说「那是因为我爱他」,于是其他人都散了。[^2]
亨伯特·亨伯特也在小说中表露了对多洛莉丝的爱,甚至在她长大嫁人且怀有身孕后,仍然要求和她在一起。这提出了非常令人不安的问题:恋童癖犯人对儿童的情感真的是爱吗?如果说亨伯特·亨伯特爱上的是他想象中的洛丽塔而非真实的多洛莉丝,那问题是,难道世界上许多的爱情不都发生在人对人的不真实想象中吗?毕竟,去爱具体的人是需要学习的事情。
我喜欢让我感到恐惧和不安的小说,兴许我会找来读的。
---
## 指引
这是完全随机出现的栏目,之所以会有这一栏,是因为我在周日的晚上用塔罗牌抽取下周的运势,突然想把它写下来。我也不知道下周会不会继续写。

这副牌叫作《暴风雨塔罗》,之前是独立出版的,价格是两百多,前几个月被 U.S. Games 出版商买了下来,现在只需要八九十人民币左右就能买到。我很喜欢航海主题,这幅牌整体的配色很舒服。
上周的运势有两张权杖牌,一张是权杖十的逆位,另一张是权杖二。权杖在塔罗牌里代表火元素,一般和行动力和创造力相关,果不其然,我上周从周四开始就几乎什么都没干,在前几天把精力都用完了,甚至周五和周六感到心情非常低落。这周的牌就看起来温和很多,尤其是圣杯国王,感觉会和一些人有舒服的相处,或者是塔罗牌在告诉我多向他人提供帮助、找点话聊,因为我好像快一个月没有和活的人类有过超过一分钟的对话了。
我的精神状态可能会有所好转,因为圣杯牌在我看来是情绪稳定的象征,看圣杯七的话,下周有可能在想一些让自己感到幸福的事情,不像前一两周那样被负面想法困扰。
不过,牌面上还出现了我很害怕的宝剑牌逆位。说来也巧,我一直把一张宝剑女王加载自己随身携带的本子里,有朋友问起时,我解释道这是因为我很相信宝剑女王的判断力,理性当中又带有一些人情味,希望能当作护身符一样的东西。宝剑女王的另一个面向或许是太喜欢对人评头论足了,这周抽到逆位的宝剑女王或许是一个提醒(如果你关注我的[联邦宇宙账号](https://akk.eltr.ac/@eltrac)的话,就会发现我几乎天天都在骂我的同室)。至于宝剑六的逆位,我大概是处在一个情绪状态的过渡期,不过貌似是卡住了,可能先要克服宝剑女王的对我的影响吧。
牌面上的两张宫廷牌对照还挺鲜明的,逆位的宝剑女王喜欢评头论足,有些自以为是,会把身边的人推走,而圣杯国王则是很亲切随和的形象。唔,或许我真的要对身边的人类展现出更多的善意了,释放善意也是在为自己的心理健康着想。
感觉下周会从暴风雨逐渐转变为晴朗的好天气呢,有些期待。
---
## 切片
- 已经完成一百期周刊的四分之三了,真快啊。
- 博客的标签乱得有些不可理喻了,尽管在《[极客死亡计划书 V](/article/site-report-5/)》里为标签的正当性进行了辩护,但…… 我不得不承认,我现在有点想把它删掉,顺便优化一下[双向链接图谱](/graph.html)功能,方便找到同一主题的文章。*我闻到了《极客死亡计划书 VI》的味道。*
[^1]: REPL:Read-Eval-Print-Loop,输入-计算-打印-循环。
[^2]: 不过主角中有一人坚持认为她有罪,于是装成高中生,脱掉上衣修剪草坪以色诱她,最后他们确实上了床,然后女恋童癖把他的阴毛剃了,然后他的女朋友发现了…… 呃,等等,我怎么写到这里来了?