Абсолютное первое использование схемы, Простое управление списком - PullRequest
2 голосов
/ 21 марта 2012

Я ослеп на схеме и чувствую, что, как только я отвечу на этот вопрос, остальная часть моей домашней работы должна идти гладко.

Я определяю функцию, которая принимает список в качестве единственного аргумента, затемвозвращает тот же список с первым элементом, добавленным к остальным.Например:

(addFirst ‘(4 3 2 1))   =>   (8 7 6 5)

У меня такое чувство, что я должен использовать здесь функции карты и машины ... но я просто не могу понять, что это правильно.Моя текущая версия этого кода выглядит следующим образом:

(define (addlist x) ;adds the first element of a list to all other elements
  (define a (car x)) ;a is definitely the first part of the list
  (map (+ a) x)
)

Как я могу заставить функцию добавления работать таким образом?Очевидно, я не могу предоставить список в качестве параметра, но должен ли я снова использовать машину или рекурсию?

Хорошо, для потомков, вот полный, правильный, отформатированный код:

(define (addlist x) ;adds the first element of a list to all other elements
  (define a (car x)) ;a is definitely the first part of the list
  (map (lambda (y) (+ a y)) x)
)

1 Ответ

8 голосов
/ 21 марта 2012

Карта принимает функцию и n списков.Поэтому вам нужно преобразовать (+ a) в функцию, которая принимает один аргумент (как вы хотите отобразить в один список).

(map (lambda (item) ... do something to add a to item ...) x)
...