Моя проблема состоит в том, чтобы сделать простую программу плюс-минус на языке Racket R5RS. Основная идея задачи состоит в том, чтобы поставить знаки плюс/минус перед каждым элементом в списке и проверить, является ли результат одним из элементов в списке. Ниже то, что у меня есть прямо сейчас:
(define plus-minus (lambda (lst l sum)
(cond
((null? lst)
(cond
((null? l) #f)
((= sum (car l)) #t)
(else (plus-minus lst (cdr l) sum))))
((plus-minus (cdr lst) l (+ sum (car lst))) #t)
((plus-minus (cdr lst) l (- sum (car lst))) #t)
(else #f))))
Этот код рабочий, но требуется, чтобы в параметрах был один и только один список, а все остальные числа. Первые два параметра в моем коде идентичны при первом вызове функции. Первый получает сумму. Второй — проверить, равна ли сумма одному из элементов списка. Оба списка необходимы, потому что, когда я получаю сумму, элементы в первом списке удаляются.
Мой вопрос: как избавиться от второго списка в параметрах? Могу ли я в любом случае перебирать список, не удаляя элементы (рекомендация CDR)?