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

在Scheme中为何出现‘object not applicable’错误?求技术解答

解决Scheme中"object not applicable"错误的方案

你的代码问题出在多余的括号使用上——Scheme里括号的作用是标记函数调用,一旦给普通变量/值加上额外括号,解释器就会尝试把它当成函数来执行,而你的列表元素或子列表显然不是函数,所以触发了"object not applicable"错误。

具体错误点及修正:

  1. 空列表判断的括号错误:
    原代码:((null? (st1)) #t)
    错误原因:(st1)是试图调用st1作为函数,但st1是传入的列表参数,不是函数。
    修正为:(null? st1)

  2. 函数调用的参数传递错误:
    原代码:((in? ((car st1) st2)) (subset? ((cdr st1) st2)))
    错误原因:((car st1) st2)是把(car st1)当成函数调用,传入st2作为参数,但(car st1)是列表的元素,不是函数;同理((cdr st1) st2)也是错误地把剩余列表当成函数。
    修正为:(in? (car st1) st2) 和 (subset? (cdr st1) st2)

修正后的完整代码:

(define subset? 
  (lambda (st1 st2) 
    (cond 
      ((not (set? st1)) (error "Your first argument is not a set!")) 
      ((not (set? st2)) (error "Your second argument is not a set!")) 
      ((null? st1) #t) 
      ((in? (car st1) st2) (subset? (cdr st1) st2)) 
      (else #f) 
    )
  )
)

额外说明:

假设in?是你已经定义好的、用来检查元素是否在集合中的函数(比如通过遍历集合判断存在性),修正后的代码就能正常递归判断st1是否是st2的子集了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:14:12