Заменить элемент в списке в схеме - PullRequest
1 голос
/ 25 октября 2010

Я ищу функцию в Схеме, чтобы заменить элемент в уравнении значением.

Пример: '(+ a b c a) с (1 2 3) должен дать мне '(+ 1 2 3 1). (я не хочу решать уравнение, это был просто пример)

По сути, я хочу сказать, что a = 1, b = 2, c = 3

Для продолжения я извлекаю переменные из моего первого списка в другой список. Затем я получил ожидаемые значения в другом списке. Теперь я хочу присвоить значения переменным.

Есть какие-нибудь намеки на то, как мне поступить? Большое спасибо.

Ответы [ 2 ]

3 голосов
/ 26 октября 2010

Вы можете использовать «список ассоциаций» сопоставлений, который выглядит так: ((a 1) (b 2) (c 3)).

assq может получить соответствующую пару.Итак, для всего в вашем исходном списке вы можете найти его, используя assq, а затем заменить его.

Итак:

  (lambda (ls a-list)
    (map (lambda (x)
           (let ((lookup (assq x a-list)))
             (if lookup
                 (cadr lookup)
                 x)))
         ls)))

Возьмет список и список ассоциаций и заменит ихвсе в исходном списке с его заменой (если есть).

1 голос
/ 26 октября 2010

Разве это не то, что let делает?

> (let ((a 1) (b 2) (c 3))
     (+ a b c b))
=> 8

Если вы не хотите оценивать выражение:

> (let ((a 1) (b 2) (c 3))
    `(+ ,a ,b ,c ,a))
=> (+ 1 2 3 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...