这里的新计划。我正在尝试编译一个方案函数range
。它非常简单 - 需要start
,step
和stop
列表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 '()))
)
)
任何指针都会很棒。我不确定这是错字还是逻辑错误。谢谢!
答案 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 '())
))