Как я могу добавить два списка вместе? Схема - PullRequest
0 голосов
/ 19 мая 2019

Мне нужна помощь в объединении двух списков.Моя цель - заменить "a" на "abc".Я уже сделал счетчик и т. Д., Но каким-то образом я не могу добавить эти два списка (список, который является пустым списком и '("abc") как мой новый список, который я хочу добавить).

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

(define (umwandl tr)
  (cond ((null? tr) (display "Kein Text eingegeben"))
        (else (uff (string->list tr) '()))))  ; string wird nict inliste umgweandel

(define (uff tr liste)
  (cond ((null? tr)(list->string liste))
        (else 
           (cond ((equal? (first (rest (first (start1 (first tr))))) 1)
                    **((append list (list '("abc"))))))**
                    (uff (rest tr) liste))))

Мои сообщения об ошибках либо ('("abc")) не аргумент, либо просто дают мне "" в качестве ответа,Было бы очень приятно, если бы кто-нибудь мог помочь!

1 Ответ

1 голос
/ 23 мая 2019

Схема обучения или любой Лисп означает знакомство со структурой списка. Список (1 2 3) может быть составлен как (cons 1 (cons 2 (cons 3 '()))), и мне нравится думать, что элемент в списке, у которого нет ., означает, что он есть, а у остальных есть дополнительный набор парантезов. Сделано рекурсивно! Таким образом:

'(1 2 3)              ; ==
'(1 . (2 3))          ; ==
'(1 . (2 . (3)))      ; ==
'(1 . (2 . (3 . ()))) ; ==> (1 2 3)

Я вижу точки, которых нет, когда вижу списки, поэтому я знаю, 3 равно caddr, поскольку я прохожу . ( 2 раза (dd) и затем прыгаю в car, таким образом caddr. Присоединение двух списков вместе означает копирование первого списка и замену () на второй список . Таким образом, append можно определить как:

(define (my-append l1 l2)
  (if (null? l1) 
      l2
      (cons (car l1) 
            (my-append (cdr l1) l2))))

Замена одного элемента другим. Вам нужно сделать то же самое, НО вы сравниваете первый элемент в каждой итерации и на основании этого либо используете найденный элемент, либо замену. Если вы хотите сравнить строки, вам нужно использовать equal?, так как (eqv? "hello" "hello") ; ==> #f является действительным результатом.

...