我正在尝试定义一个函数来标记sexpr in方案中的尾部调用与非尾部调用。它的定义如下:
TCS ::= SYMBOL | NUMBER | IF | FUNCTION-CALL
IF ::= (if TCS TCS TCS)
FUNCTION-CALL ::= (TCS TCS...)输入/输出的示例如下:
(mark-tail-calls '(if (a (b c)) (e (f g) h) i) (j (k 7)))
=> (if (non-tail-call a (non-tail-call b c)) (non-tail-call e (non-tail-call f g) h) i) (tail-call j (non-tail-call k 7))我知道尾部调用和非尾部调用之间的区别,但我发现编写函数很困难,因为我对方案几乎没有经验。任何帮助/指向正确方向的人都将不胜感激
发布于 2016-10-27 03:08:40
希望能帮你入门:
您通常会对输入(和递归)的结构进行案例分析。
一些类似的东西
(define (mark-tail-calls e)
(cond ((null? e) '())
((symbol? e) e)
((number? e) e)
((if? e) (list 'íf ...)
((symbol? (car e)) ...)
(#t ...))))其中if?定义为
(define (if? e)
(and (pair? e)
(equal? (car e) 'if)))https://stackoverflow.com/questions/40269255
复制相似问题