{"componentChunkName":"component---src-pages-index-js","path":"/","result":{"data":{"site":{"siteMetadata":{"title":"星雨之夜"}},"allMarkdownRemark":{"edges":[{"node":{"excerpt":"停机问题 我们再来回顾一下停机问题： 是否存在一个函数 P，对于任意输入的函数 w，能够判断 w 会在有限时间内结束或者死循环。 通过前文的论述，我们已经知道这样的函数 P 是不存在的。由此可知，某些函数存在可以用语言描述却无法被程序定义的情况，以 Scheme…","fields":{"slug":"/recursive-to-y-combinator/"},"frontmatter":{"date":"2019 年 01 月 29 日","title":"从递归到 Y 组合子","description":"本文是对「The Little Schemer」第九章后半段的再推导，也是对我学习 Scheme 过程的补充。主要讲述匿名函数如何递归，并由此引出 Y 组合子。"}}},{"node":{"excerpt":"自定义函数 (looking a lat) 定义：在一个 lat 中查找有没有 a，但按照如下规律： 假设 a 是 caviar，lat 是 (6 2 4 caviar 5 7 3)，那么列表的第 1 个元素是 6，第 6 个元素是 7，第 7 个元素是 3，第 3 个元素是…","fields":{"slug":"/the-little-schemer-summary-9/"},"frontmatter":{"date":"2019 年 01 月 24 日","title":"The Little Schemer 知识点整理（九）：……周而复始……","description":"这一章介绍了“非一般性”递归，这样的递归可能会使函数进入无限循环或者引发悖论，比如“停机问题”。然后讨论了在函数无法被定义（名字）的情况下如何实现递归，即 Y 组合子。"}}},{"node":{"excerpt":"准备知识 函数可以返回原子和列表；它也能返回一个函数。 你可能听说过函数“柯里化”。 col 是 collector 的缩写，有时又叫 continuation。 Scheme 十诫之第九诫 用函数来抽象通用模式。 Scheme…","fields":{"slug":"/the-little-schemer-summary-8/"},"frontmatter":{"date":"2019 年 01 月 09 日","title":"The Little Schemer 知识点整理（八）：Lambda 终结者","description":"这一章讲述了 Scheme 的柯里化，函数能够返回函数；以及在函数递归的过程中，构建 collector 来收集多个值。"}}},{"node":{"excerpt":"准备知识 set：集合，注意区别于 collection，原子组成的列表，其中不包含重复原子。 pair：其中的两个元素是含义不同但是相关的对象。 构建 pair：。 构建 pair 的表示方式： rel：由 pair 组成的 set。 自定义函数 (set? lat…","fields":{"slug":"/the-little-schemer-summary-7/"},"frontmatter":{"date":"2019 年 01 月 05 日","title":"The Little Schemer 知识点整理（七）：朋友及关系","description":"本章介绍了 set（集合）、pair（对）和 rel（关联列表），它们描述了列表之间更深层次的关系。"}}},{"node":{"excerpt":"准备知识 算术表达式 它要么是一个原子（包括数字），要么是用 +×↑ 连接起来的两个算术表达式。 算术表达式的表示方式 中缀： 后缀： 前缀： 前缀： 表示法 数字也是某种表示法，比如阿拉伯表示法 4。我们也可以用  来表示。 Scheme…","fields":{"slug":"/the-little-schemer-summary-6/"},"frontmatter":{"date":"2018 年 12 月 29 日","title":"The Little Schemer 知识点整理（六）：如影随形","description":"本章介绍了如何引入辅助函数来构建高阶抽象，同时告诫我们抽象的同时也会引入更多风险，需要关注到其中的副作用。"}}},{"node":{"excerpt":"准备知识 所有 * 函数所处理的列表，都满足以下情况中的一种： 空列表。 一个原子 cons 在一个列表上。 一个列表 cons 在另一个列表上。  第一个参数为 false 则直接返回 false； 第一个参数为 true 则直接返回 true…","fields":{"slug":"/the-little-schemer-summary-5/"},"frontmatter":{"date":"2018 年 12 月 13 日","title":"The Little Schemer 知识点整理（五）：我得天！都是星星","description":"前面几篇介绍完基础类型和基础知识后，这一章开始写星星函数（*）。在以前的基础上，完善了其中几个函数的语义。同时还强调，如果要对代码做简化或者优化，需要先保证功能的正确性，用我们学到的来描述就是要把每个问题都问完。"}}},{"node":{"excerpt":"在写 「The Little Schemer」知识点整理 系列的时候，理想状态是我一口气把书看完，并快速概括出其中的要点并写下来。往往事与愿违。本文就是阅读此书过程中，“一口气”被分割成好几口气之后的附属品，根据这几天在 GitHub 上提交的几个有关代码高亮的 PR…","fields":{"slug":"/how-to-contribute-to-open-source-project/"},"frontmatter":{"date":"2018 年 12 月 08 日","title":"如何向开源项目贡献代码","description":null}}},{"node":{"excerpt":"准备知识 所有数字都是原子； 暂时只考虑非负整数，0、1、2、3……； 用  判断数字  是否为零； tup 是元组 Tuple 的缩写，用来表示一个数字列表， 也是一个 tup…","fields":{"slug":"/the-little-schemer-summary-4/"},"frontmatter":{"date":"2018 年 12 月 06 日","title":"The Little Schemer 知识点整理（四）：数字游戏","description":"顾名思义，本章内容在跟数字打交道。介绍了 zero? / number? 等基本函数，然后引入了 add1 和 sub1 这两个在本章大显身手的函数，而后按部就班地教我们定义了数学运算中的加减乘除及其他方法。"}}},{"node":{"excerpt":"Scheme 十诫之第二诫 使用  来构建列表。 Scheme 十诫之第三诫 构建一个列表的时候，描述第一个典型的元素，之后  该元素到一般性递归上。 Scheme…","fields":{"slug":"/the-little-schemer-summary-3/"},"frontmatter":{"date":"2018 年 12 月 05 日","title":"The Little Schemer 知识点整理（三）：用 cons 构筑恢宏","description":"第三章主要介绍了 cons 的用法，并一步步实现了移除、替换、插入元素等几个常用的函数。"}}},{"node":{"excerpt":"准备知识  : 判断 S-表达式  是否为一个原子。  : 总是 true。  : 询问两个问题  和 ，一次问一个。如果  的答案为 true，则停止问第二个问题 ，答案为 true。否则继续询问，答案为  的答案（true 或者 false…","fields":{"slug":"/the-little-schemer-summary-2/"},"frontmatter":{"date":"2018 年 12 月 05 日","title":"The Little Schemer 知识点整理（二）：处理，处理，反复处理……","description":"第二章开始引入递归思想。看书的时候一开始没看懂，以为印错了，一模一样的内容出现了很多次，当发现问题所在的时候，不禁莞尔，原来如此啊。"}}},{"node":{"excerpt":"此系列按照章节整理了 「The Little Schemer：递归与函数式的奥妙」 的全书知识点。 备忘录，仅供参考。 Scheme 五法 car 之法则 基本元件  仅定义为针对非空列表。 cdr…","fields":{"slug":"/the-little-schemer-summary-1/"},"frontmatter":{"date":"2018 年 12 月 05 日","title":"The Little Schemer 知识点整理（一）：玩具总动员","description":"第一章介绍了 Scheme 语言中的几个基本元件及其使用规则和方法。问答式的学习方式让人眼前一亮。"}}},{"node":{"excerpt":"昨天下午摸鱼的时候心血来潮，在 Virtual Box 中安装了一遍 Arch Linux。很久以前虽然也装过，还是带 X 的，但是这回装个不带 X 的居然还碰到了一堆坑。于是整理出一份精简版的安装步骤，供后来者（包括健忘的自己）参考，少走弯路。 一、安装准备 将 Arch…","fields":{"slug":"/simplified-installation-steps-for-archlinux/"},"frontmatter":{"date":"2018 年 10 月 25 日","title":"Arch Linux 的简化版安装步骤整理","description":"本文整理了在虚拟机里安装 Arch Linux 的步骤，简单到基本上只要按照命令一条一条跑就可以了。"}}},{"node":{"excerpt":"假定你已经在微信公众号配置好相应的域名，比如 。 修改  macOS 下：，添加一条记录： 修改  配置 添加一个配置文件： 其他的  或其他参数可以按照规则自行添加。完成之后重新加载： 删除微信开发者工具 HSTS…","fields":{"slug":"/how-to-create-a-reverse-proxy-for-wechat-dev/"},"frontmatter":{"date":"2018 年 10 月 11 日","title":"如何为微信开发建立本地反向代理","description":"本文介绍如何运用 hosts 和 nginx 建立本地反向代理，包括但不限于简化微信开发流程。"}}},{"node":{"excerpt":"如题，只是一个包装成函数的 fish 脚本。因为有些应用偶尔会进入无响应状态，不想每次都手动查找端口来杀进程。 用法 以上 3 行放到  里面。请谨慎使用!!! 不会覆盖所有需求，主要是自己用得爽 🤣 2018.09.04 发现  命令能更加简单地完成需求：","fields":{"slug":"/kill-process-by-name/"},"frontmatter":{"date":"2018 年 08 月 08 日","title":"按应用名字杀进程的 fish shell 脚本","description":"类似于 pkill，这里的实现是用 fish 函数包装一层 kill 命令。"}}},{"node":{"excerpt":"I’m back. 备份一下现在的 Hexo 设置。 主题和插件 _config.yml - 根目录 _config.yml - 主题目录 v6.6.0","fields":{"slug":"/hexo-cfg/"},"frontmatter":{"date":"2018 年 08 月 07 日","title":"Hexo 设置备份","description":"备份当前使用的博客系统 Hexo 的设置，包括站点和主题配置。"}}},{"node":{"excerpt":"爬虫一向都很有意思，当你把想要的内容从网络中抓取并保存下来的时候，一定会得到“占有”它的满满的幸福感 (๑´ڡ`๑) 大部分爬虫是很繁琐的，需要手动写出许多规则来过滤大部分的无效内容；有些就很简单了，可以通过网站提供的 API…","fields":{"slug":"/web-crawler-for-hitokoto/"},"frontmatter":{"date":"2015 年 05 月 05 日","title":"Hitokoto.us（一言）的 API 爬虫","description":null}}},{"node":{"excerpt":"前阵子终于搞定 SublimeLinter 让它正常工作了，却一直没时间去记录折腾的经历（没错，其实是懒）。这么一拖，微软居然就发布了 Visual Studio Code，看到大多数评价都是“赞赞赞”、“快快快”、“巨硬大法好”，让吾等 Sublime…","fields":{"slug":"/install-sublime-linter/"},"frontmatter":{"date":"2015 年 05 月 04 日","title":"整理 SublimeLinter 的安装步骤","description":"在彻底叛变到 VS Code 之前，整理一下安装 SublimeLinter 的步骤。"}}},{"node":{"excerpt":"这次我为了透明效果叛变到了 Xfce，而且我很喜爱简洁风格，确实应该来尝试一下这款轻量级的桌面。当然，折腾一番流行度仅次于 KDE / GNOME 的桌面环境才符合折腾党的特点嘛。此文用于记录我的一些初始配置，只保证在 Archlinux…","fields":{"slug":"/xfce-settings/"},"frontmatter":{"date":"2015 年 04 月 25 日","title":"记录 Xfce 的一些配置","description":"本文记录了使用 xfce 桌面系统时的一些配置。"}}},{"node":{"excerpt":"大约在 10 个月之前，我正式开始使用 Linux 作为日常操作系统。到现在为止也积累了一些装机和使用经验，下面来谈一谈我所使用过的几种发行版及其桌面环境，只说体验和评价 XD 1. Ubuntu 最初我选择了 Ubuntu…","fields":{"slug":"/experience-for-linux-distributions/"},"frontmatter":{"date":"2015 年 04 月 12 日","title":"Linux 各发行版的体验报告","description":"花了比较久的时间体验了 Linux 的各种发行版。包括最多人使用的 Ubuntu，命令行从头配置到尾的 Arch Linux，Arch 的衍生版 Antergos，还有精美的大蜥蜴 openSUSE。"}}},{"node":{"excerpt":"换工作已经一个多月了，很惭愧在毕业后的一年半时间里从来没有好好总结过。还是不想被往事纠缠太多，于是就来写一写现在与未来的流水账吧。 过去 (´・ω…","fields":{"slug":"/new-start/"},"frontmatter":{"date":"2015 年 04 月 07 日","title":"新工作，新开始","description":"我们的征途是星尘大海。"}}},{"node":{"excerpt":"本文不定时更新，首次发表于 2015 年 2 月 1 日，最后编辑于 2017 年 1 月 18 日。 2015-02-01 CentOS 中 nginx 的权限 这两天把服务器从 Ubuntu 换成 CentOS，没想到就立刻踩到了奇怪的坑。首先 nginx…","fields":{"slug":"/problems-encountered-in-linux/"},"frontmatter":{"date":"2015 年 02 月 01 日","title":"记录 Linux 中踩到的一些坑","description":"本文不定时更新，首次发表于 2015 年 2 月 1 日，最后编辑于 2017 年 1 月 18 日。"}}}]}},"pageContext":{}}}