Emulating Goto in Scheme with Continuations
7 days ago
- #call/cc
- #Scheme
- #GOTO
- Dijkstra批评GOTO语句过于原始且容易导致代码混乱。
- Scheme语言虽没有GOTO语句,但可通过call/cc(call-with-current-continuation)模拟其行为。
- GOTO允许跳转到代码不同部分,常用于循环和资源清理场景。
- call/cc能捕获当前续体(continuation),从而实现对控制流的灵活操控。
- Scheme中通过宏'with-goto'利用call/cc实现了GOTO的模拟功能。
- 在'with-goto'中,标签被定义为无参数过程(thunks)。
- 续体机制支持直接跳转至标签,无需返回到原始调用点。
- 该实现效率较低且不实用,但充分展示了call/cc的强大能力。
- 文中建议使用delimited continuations(受限续体)作为call/cc的更优替代方案。