我需要将两个列表合并在一起的帮助。我的目标是将"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"))
不是自变量,或者只是给了我""
作为答案。如果有人可以帮助,那就太好了!
答案 0 :(得分:1)
学习计划或任何Lisp意味着要了解列表结构。可以像(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
是有效的结果。