You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否将字面量列表作为SRFI 1的append!过程的参数使用?

你的思路是完全正确的。SRFI 1的append!作为破坏性拼接过程,确实会对除最后一个入参外的所有列表入参调用set-cdr!修改其最后一个节点的尾指针,以此实现零额外内存分配的拼接。而字面量列表属于不可变对象,对其执行set-car!/set-cdr!属于Scheme标准规定的未定义行为,不只是“无效”这么简单,部分实现会直接抛出运行时错误,部分实现可能静默失败但修改不会生效,绝对不允许这么使用。

仅将字面量列表作为append!的最后一个入参是合法的,因为append!不会修改最后一个入参的内容,只会将前一个列表的尾指针指向它。

对应你给出的两个测试用例结论如下:

  • (append! (list 1) '(2 3)):合法。第一个入参是list过程生成的可变列表,会被append!修改尾指针,最后一个入参是字面量列表不会被修改,运行结果符合预期。
  • (append! '(1) (list 2 3)):非法。第一个入参是字面量列表,append!会尝试修改它的尾指针,属于未定义行为,不应该在生产代码中出现。

内容的提问来源于stack exchange,提问作者Flux

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 17:57:04