【问题标题】:Getting a "application: not a procedure" error [duplicate]收到“应用程序:不是程序”错误[重复]
【发布时间】:2013-10-03 01:25:38
【问题描述】:

这段代码的目的是删除并返回列表 X 的前 N ​​部分

{define (grab x n) 
   (cond
     [(< (len x) n) x]  
     [(> n 1)((car x) (grab(cdr x) (- n 1)))]
     [(= n 1)(car x)]
 )}

目前只是返回上述错误

【问题讨论】:

    标签: scheme


    【解决方案1】:

    您的解决方案中有几个错误:

    • 在第二个条件中,您忘记了 cons 当前值 - 请记住,我们正在递归构建一个 list 作为答案,我们必须使用 cons 这样做李>
    • 第二个和第三个条件应该使用0 而不是1。否则,当n 等于零时,该过程将失败
    • 基本情况,当 n 等于 0 时,应该返回空列表 - 否则输出列表将无法正确构造

    通过上述所有修复,该过程将起作用:

    (define (grab x n)
      (cond
        [(< (len x) n) x]
        [(> n 0) (cons (car x) (grab (cdr x) (- n 1)))]
        [(= n 0) '()]))
    

    附带说明一下,如果您的解释器中提供了 take 过程,那么您基本上是在实现该过程(除非 take 会在 n 大于列表长度时引发错误):

    (take '(1 2 3 4 5) 3)
    => '(1 2 3)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-23
      相关资源
      最近更新 更多