Recursion 使用scheme递归地向lambda x添加值y

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) ) ) ) 我正在实施的数字是:

我一直在尝试各种组合,但似乎找不到合适的组合。我试图做的是将变量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)
    )
  )
)
我正在实施的数字是:

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