Recursion 使用scheme递归地向lambda x添加值y
我一直在尝试各种组合,但似乎找不到合适的组合。我试图做的是将变量y添加到列表x中的每个元素,并打印出带有结果的列表(y+x_1+y+x_2…y+x_n) 这是我的方案代码:Recursion 使用scheme递归地向lambda x添加值y,recursion,lambda,scheme,racket,Recursion,Lambda,Scheme,Racket,我一直在尝试各种组合,但似乎找不到合适的组合。我试图做的是将变量y添加到列表x中的每个元素,并打印出带有结果的列表(y+x_1+y+x_2…y+x_n) 这是我的方案代码: (define (incall y) (lambda (x) (if (null? (cdr x)) x ;;Tried several variations (+ y x) ;;Same here (using car/cdr /cons) ) ) ) 我正在实施的数字是:
(define (incall y)
(lambda (x)
(if (null? (cdr x))
x ;;Tried several variations
(+ y x) ;;Same here (using car/cdr /cons)
)
)
)
我正在实施的数字是:
((incall 2) '(1 2 3))
应该让步
(2 3 4)
感谢您的帮助,并解释我做错了什么。您需要命名您的curried过程,以便您可以从列表中的其他部分使用它:
(define (add-list intial-value)
(define (curried-proc lst)
...)
curried-proc) ; return the proc
我不知道你为什么想要这个界面。我宁愿做(添加列表2'(1 2 3));=>(3 4 5)
,然后您可以执行以下操作:
(define (add-list initial-value lst)
(define (helper lst)
...)
(helper lst)) ; return the result of calling helper
所以对助手说。。您只需要处理第一个元素,如果不为null,则对其余元素进行递归。对于null,它应该是null。例如
(define (helper lst)
(if (null? lst)
<??> ; what is the result of (incall 5 '())
(cons <calculate> ; what whould (car x) be replaced with?
(helper (cdr lst)))))
另一种方法是使用map
,因为除了处理每个元素之外,它还处理大多数辅助对象:
(define (halve-list lst)
(map (lambda (e) (/ e 2)) lst))
尝试一个简单函数的各种组合通常意味着您尚未理解核心材料。你确定你知道列表或函数在lisp中是如何工作的吗?不完全知道,当我们开始使用其他变量和lambda时,我松开了线程。我手头的材料没有很好地涵盖这一点。如果您有任何建议,我可以在哪里阅读更多关于它和它的功能将不胜感激。您尝试过吗?谢谢@sylvester。这使我走上了正确的道路。我完成后会给出我的结果。再次感谢你!
(define (halve-list lst)
(map (lambda (e) (/ e 2)) lst))