You need to enable JavaScript to run this app. 这段简单Scheme代码报错是什么原因?该如何修复?
优惠活动
大模型
产品
解决方案
定价
更多

这段简单Scheme代码报错是什么原因?该如何修复?

报错原因

你使用的是邱奇编码定义的自然数,这类定义的数值本质是高阶函数,调用规则为:第一个入参f必须是单参数可调用函数,第二个入参x是计算初始值。
你调用时给第一个参数传了数值1,不符合规则:

  • ZERO的实现逻辑是直接返回第二个参数x,全程没有用到f,所以即使传错参数也能正常返回结果,不会触发报错
  • ONE的实现逻辑是将f调用1次,传入的f是数值1,执行(f x)就变成了非法的(1 0)调用,数值无法作为函数执行,因此抛出对应错误
  • SUCC生成的新邱奇数同样会调用f参数,所以也会触发同类报错
修复方法

你可以先定义一个符合要求的单参数函数作为邱奇数的第一个入参,比如用于数值计算的自增函数,修改后可运行的代码如下:

(define ZERO (lambda (f x) x))    
(define ONE (lambda (f x) (f x)))
(define SUCC (lambda (n) (lambda (f x) (f (n f x)))))
; 定义单参数自增函数,作为邱奇数的调用参数
(define (add1 v) (+ v 1))
(display (ZERO add1 0))
(display (ONE add1 0))
(display ((SUCC ZERO) add1 0))

运行上述代码会依次输出0、1、1,符合预期逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 21:45:08