无法编译方案函数

时间:2012-07-09 01:02:51

标签: list functional-programming scheme

这里的新计划。我正在尝试编译一个方案函数range。它非常简单 - 需要startstepstop列表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))))))))

我收到错误

  

形成错误的特殊形式:(定义helper2(启动stepamt stop curstep newlist)(如果...... ......))

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

这是调用该函数的函数:

(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 '()))
)

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

3 个答案:

答案 0 :(得分: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)这样的电话:......”

答案 1 :(得分:3)

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

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

(define (example L) ...

答案 2 :(得分: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 '())
))