返回首页
24小时热榜
我已经花了几个月时间在这个项目上,最初是因为我对使用大型语言模型(LLMs)学习的方式感到沮丧。你会得到一大堆文本,这些内容会消失在聊天记录中。而维基百科则是完全相反:无尽的无结构的知识深渊。我想要的是两者之间的东西。
Periplus生成的课程是相互关联的Markdown文档,量身定制以适应你的水平。它会提前问你几个问题,构建一个课程大纲,每个概念都链接到相关的内容。点击一个你不理解的术语,它会在旁边打开一个新的文档。
这个项目受到了Obsidian的强烈启发——图形视图类似,如果你想将笔记保存在本地,还有Obsidian导出功能。
它还可以从任何文档生成测验和抽认卡,这有助于解决我在被动阅读中总是遇到的遗忘问题。
技术栈:React、Node/Express、Postgres(使用pgvector)、Sonnet 4.5用于生成。图形使用D3,并结合了我制作的WASM优化的多体模型[1]。
还有很多细节需要完善!我非常希望能收到关于课程质量的反馈,目前我主要测试的是技术主题。
[1]: [https://www.npmjs.com/package/d3-manybody-wasm](https://www.npmjs.com/package/d3-manybody-wasm)
# Dragonlang
<p>一种基于行的小型语言,具有一个最小的解释器,位于 `__main__.py` 中。</p>
## 文件扩展名
<p>源文件使用 `.dragon` 扩展名。解释器也接受没有扩展名的文件名,如果存在,会尝试 `<name>.dragon`。</p>
## 运行
<p>文件模式:</p>
```bash
python __main__.py path/to/program.dragon
```
<p>REPL 模式:</p>
```bash
python __main__.py
```
<p>输入 `exit` 或 `quit` 以退出 REPL。</p>
### 文件解析
<p>当路径参数没有扩展名(名称中没有 `.`)时,解释器会首先尝试 `<path>.dragon`,如果存在的话。</p>
## 执行模型
- 解释器一次处理一行。
- 没有多行语法、块结构或语句分隔符。
- 解析基于简单的子字符串检查,而不是词法分析或语法分析。
### 匹配顺序
<p>行的检查顺序如下,首先匹配的优先:</p>
1. `+`(加法)
2. `-`(减法)
3. `print`
4. `on error`
5. 精确的变量查找
6. 回退错误
<p>这意味着包含 `+` 或 `-` 的行将永远不会达到 `print` 或 `on error` 处理,即使这些词出现在行中。</p>
## 语法和行为(基于 `__main__.py`)
<p>每行独立处理。解析是最小的,基于子字符串检查,而不是正式的语法。</p>
### 打印
<p>打印字符串字面量:</p>
```dragon
print "hello"
print 'world'
```
<p>如果 `print` 后的文本与解释器环境中的变量名匹配,则打印其值。(变量尚不可赋值。)</p>
<p>注意:</p>
- `print` 可以在行的任何位置被检测到,而不仅仅是在开头。
- 解释器会去掉 `print`,然后修剪两端的空格和引号(`"`,`'`)。没有转义处理。
### 整数数学
<p>支持整数的加法和减法:</p>
```dragon
2+3
10-4
```
<p>运算符周围允许有空格。</p>
<p>注意:</p>
- 解释器在看到的第一个 `+` 或 `-` 处分割。
- 两边的内容会被修剪并在解析前在环境中查找。
- 非整数值会引发 `ValueError`,并作为通用错误报告。
### 变量(只读)
<p>如果变量已存在于解释器环境中,可以读取变量。目前没有语法来赋值新变量。变量存储在 `__main__.py` 中的 `env` 字典中。</p>
### "on error"
<p>有一个特殊的行前缀 `on error`,该前缀会被解析,但目前不会产生输出。它会去掉前缀,如果环境中存在,则查找剩余文本,然后返回而不打印。</p>
## 错误行为
- 文件模式:`run()` 中的任何异常都会打印 `Error in line: <line>`。
- REPL 模式:捕获异常,但当前代码打印异常类对象,而不是实际的错误信息。
## 示例程序
```dragon
print "hello"
2 + 3
10-4
```
## 当前限制
- 尚不支持变量赋值(环境为只读)。
- 没有条件语句、循环或函数。
- 没有注释、字符串转义或多行语句。
- 错误报告为 `Error in line: <line>`。
- `on error` 行被解析但没有可见效果。
## 保留字
<p>以下单词在解释器中使用:</p>
- `webcollect`
- `list`
- `open`
- `system`
- `shutdown`
- `warn`
- `go to`
- `enter`
- `info`
- `time`
- `pause`
## 使用 `pause`
```dragon
pause <amount>
```
这里是Oli,<p>我32岁,远程工作,每天坐在桌子前工作10个小时,<p>这慢慢地但确实在摧残我(还有你),它不仅伤害了我的身体,也影响了我的工作效率,所以这是我尝试解决这个问题的方法:<p>连接你的日历,Movely会找到空闲时间,并在其中添加5分钟的微休息(力量训练、灵活性、减轻眼睛疲劳或压力),<p>每周日晚上,我会运行一个任务,根据你可用的时间段创建下周的会议,<p>如果你想知道我的技术栈:
* 单一代码库:Nx(前端/后端/市场营销 + 共享库)
* 前端:Next.js、Tailwind、Radix UI、Zustand
* 后端:NestJS、PostgreSQL(Prisma)、Redis(BullMQ用于调度任务)<p>如果你有任何意见、对产品的疑问或改进建议,或者觉得调度功能是否有帮助或让人感到打扰,我非常希望能收到直接的反馈 :)<p>感谢你的阅读!
我随便做了这个,因为朋友说听起来不错。<p>感觉这实际上是一个相当不错的媒体探索工具。<p>哈哈,虽然现在看起来有点随意,我需要把它整理得更合理/更好看,但它的功能还算不错。<p>考虑到假期快到了,HN(黑客新闻)可能会想找一些新的剧集来追。<p>节日快乐!