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

学习SICP时用product函数实现阶乘遇‘1 is not a function’错误求助

解决SICP中product函数定义阶乘的报错问题

你的代码里有两个关键错误导致了报错,逐一修正就能解决:

1. identity函数定义错误

你写的(define (identity h) (h))是把参数h当作函数来调用,但h是数字(比如1、2这些阶乘里的整数),调用数字自然会报“1 is not a function”的错误。正确的identity函数应该直接返回传入的参数:

(define (identity h) h)

2. product函数的迭代逻辑错误

乘积的迭代逻辑和求和完全不同,你的代码误用了求和的写法:

  • 初始值错误:乘积的初始值应该是1(乘法的单位元,任何数乘1都不变),而不是0(0乘任何数都是0,会直接导致结果错误)。
  • 迭代更新错误:每次迭代应该用当前结果乘以(term a),而不是相加。你写的(+ result (term a))是求和逻辑,改成乘法即可。

修正后的完整代码:

(define (product term a next b)
  (define (iter result a)
    (if (> a b)
        result
        (* (term a)
           (iter (* result (term a)) (next a)))))
  (iter 1 a)) ; 初始值改为1

(define (factorial x)
  (define (inc h)
    (+ h 1))
  (define (identity h)
    h) ; 修正identity函数
  (product identity 1 inc x))

(factorial 4) ; 运行结果为24,符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:10:23