Нужна помощь в схеме программы, не знаю, как ее создать - PullRequest
0 голосов
/ 22 октября 2018

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

(define(swap val1 val2 lst)
    (cond ((null? lst) (lst val1))
          ((equal? val2 lst) (lst))
          (else(equal? val2 (cadr lst)) (swap val1 val2 (cadr lst)))))

1 Ответ

0 голосов
/ 22 октября 2018

Две основные синтаксические проблемы заключаются в том, что (lst val1) и (lst) пытается вызвать lst как функцию, и что else не должно иметь условия - форма cond равна

(cond (condition1 expression1)
      (condition2 expression2)
      (else       expression))

(equal? val2 lst) говорит "val2 равно всему списку lst".Это не имеет смысла.

(equal? val2 (cadr lst)) говорит, что "val2 равно второму элементу списка lst".Вам не нужно заботиться о втором элементе.

Первый элемент - car.Хвост cdr.(Многие используют first и rest, которые являются более современными именами.)

Вы довольно близки к решению, поэтому я просто дам вам структуру:

  • Если список пуст, результатом будет пустой список.
  • Если первый элемент списка является тем, который вы заменяете, cons новое значение в результате повторения в остальныхсписка.
  • В противном случае cons существующее значение в результате повторения в остальной части списка.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...