1

在这里计划的新手。我正在尝试编译一个方案函数,range. 这非常简单 - 它需要一个start,stepstop列表L并创建一个新列表,其中每个元素 = stepAmt + curStep。

例如:(范围'(0 2 7))=>(0 2 4 6),(范围'(2 2 0))=>()

当我尝试编译时

(define (helper2(start stepAmt stop curStep newList)
(if (> start stop)
    '()
    (if (> (+ stepAmt curStep) stop)
        newList
        (helper2 (start stepAmt stop (+ stepAmt curStep) (concat newList (+stepAmt curStep))))))))

我得到错误

病态特殊形式:(define helper2 (start stepamt stop curstep newlist) (if ... ... ...))

我不确定这意味着什么。我已经仔细检查了我的逻辑和括号,但无法弄清楚。

这是将调用该函数的函数:

(define (example L)
(let (
    (start (car L))
    (curStep (car (cdr L)))
    (step (car (cdr L)))
    (stop (car (cdr (cdr L))))
    )
    (helper2 (start step stop curStep '()))
)

)

任何指针都会很棒。我不确定这是错字还是逻辑错误。谢谢!

4

3 回答 3

4

你不需要

(define helper2 (some arguments go here)
   definition goes here)

(define (helper2 some arguments go here)
  definition goes here)

记住这一点的方法是,后面的内容define看起来就像对您正在定义的函数的调用。“这里是如何处理这样的电话(helper2 some arguments go here):......”

于 2012-07-09T01:06:49.780 回答
3

仔细看看你把括号放在哪里:

(define helper2(start stepAmt stop curStep newList) ...

相对

(define (example L) ...
于 2012-07-09T01:06:22.147 回答
2

你在使用 DrRacket 吗?这有效:

#lang racket

(define (helper2 start stepAmt stop curStep newList)
(if (> start stop)
    '()
    (if (> (+ stepAmt curStep) stop)
        newList
        (helper2 start stepAmt stop (+ stepAmt curStep) (concat newList (+ stepAmt curStep))))))

(define (concat l elm)
  (append l (list elm)))

(define (example L)
(let (
    (start (car L))
    (curStep (car (cdr L)))
    (step (car (cdr L)))
    (stop (car (cdr (cdr L))))
    )
    (helper2 start step stop curStep '())
))
于 2012-07-09T03:29:37.317 回答