【问题标题】:How can I append two lists together? Scheme如何将两个列表附加在一起?方案
【发布时间】:2019-05-19 01:52:27
【问题描述】:

我需要帮助将两个列表合并在一起。我的目标是用"abc" 替换"a"。我已经做了一个计数器等,但不知何故我无法附加这两个列表(列表是一个空列表,'("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")) 不是参数,要么只是给了我 "" 作为答案。如果有人能帮忙就太好了!

【问题讨论】:

  • “我尝试添加更多括号,但添加的越多,问题就越严重”。这听起来是个很糟糕的主意。学习语法并真正理解括号应该放在首位怎么样?
  • 另外,请为您的代码发布示例输入和预期输出。并用英文发布你的代码,让更多人看懂。
  • (eq? list liste) ; ==> #f。此外,您将append 的结果作为过程调用(双括号会这样做)。像这样的东西你应该使用cons而不是appendlist,因为它会让你感到困惑。
  • 感谢您的回答,幸运的是我自己解决了这个问题!还要感谢我应该用英文发布我的代码的提示:)。

标签: list append scheme lisp racket


【解决方案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)

我看到列表时不存在的点,所以我知道3caddr,因为我通过. ( 2 次(dd)然后跳到car,因此@ 987654330@。 将两个列表附加在一起意味着复制第一个列表并将() 替换为第二个列表。因此append可以定义为:

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

将一个元素替换为另一个元素。您需要执行相同的操作,但您比较每次迭代中的第一个元素,并在此基础上使用您找到的元素或替换元素。如果要比较字符串,则需要使用equal?,因为(eqv? "hello" "hello") ; ==> #f 是有效结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-14
    • 1970-01-01
    • 2022-07-08
    • 2022-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多