Scheme 如何更新Sheme中的列表。我的意思是,在预先存在的列表上构建项目,一次一个,使用汽车

Scheme 如何更新Sheme中的列表。我的意思是,在预先存在的列表上构建项目,一次一个,使用汽车,scheme,Scheme,将以下内容作为方案程序的输入 ( define Ls ( list 'Apple 'Peach 'Pear 'Plum ) ) ( define NewLs ( list '***HEAD )) 这是我需要得到的输出 ( define Ls ( List 'Apple 'Peach 'Pear 'Plum ) ) ( define NewLs ( List '***HEAD 'Apple 'Peach 'Pear 'Plum ) ) 我需要将项目从LS附加到NewLs,但一次一个 我试

将以下内容作为方案程序的输入

( define Ls ( list 'Apple 'Peach 'Pear 'Plum ) ) 
( define NewLs ( list '***HEAD ))
这是我需要得到的输出

( define Ls ( List 'Apple 'Peach 'Pear 'Plum ) ) 
( define NewLs ( List '***HEAD 'Apple 'Peach 'Pear 'Plum ) ) 
我需要将项目从LS附加到NewLs,但一次一个

我试过了,追加,追加!集合,集合

( define Ls ( list 'Apple 'Peach 'Pear 'Plum ) )
( define NewLs ( list '***HEAD ) )
;;;
( define Update_List
   ( lambda ( Ls ) 
     ( cond
          (( null? Ls ) 
             ( begin 
                ( display "\n\n ** END OF INPUT LIST *** \n\n" ) 
                ( quote() )))
          ( else
             ( begin
                ( append! NewLs ( car Ls ) )
                ( Update_List ( cdr Ls ) ) ) ) ) )
;;;
;;;
(Update_List Ls )
( exit )      
我希望看到这个

NewLs ( '***HEAD 'Apple 'Peach 'Pear 'Plum )

我想你可能让事情变得更难了;在Scheme ish(函数式编程风格)中,我们使用
cons
等函数从现有列表中派生新列表

此外,当以函数式编程风格编写时,我们通常不会使用破坏性更新类型的函数,如
append,或任何那些“!”函数

你的思路是正确的,但是试着从现有列表中导出一个新列表来思考这个问题:试着编写一个函数,它接受两个输入列表,比如l1和l2,并生成一个列表,该列表由l1中的所有元素组成,然后是l2中的所有元素。上面的
Update\u列表
函数表明,您仍然在考虑命令式编程(包括破坏性更新)方面的问题,而Scheme(以及一般的函数式编程)中通常不是这样做的

我知道这不是对你问题的直截了当的回答,但我觉得这可能是一个家庭作业,我希望这能给你一些提示,告诉你从哪里开始/重新开始工作以找到解决方案。努力找到答案有助于更好地坚持原则,这样你就能更好地学习原则

编辑: 我向你道歉:我以为你可能是一个正在做家庭作业的学生,但后来我看到了你的另一个问题

在继续阅读之前,我仍然鼓励你考虑我上面所说的话,因为学习是在斗争中发生的。 请不要再读任何东西,然后再仔细考虑我上面的建议。




下面是我如何编写一个类似于我上面描述的函数:

(define append-lists
  (lambda (l1 l2) 
    (cond ((null? l1) l2)) ; if l1 is empty, then l2 is the "answer"
          (else 
           ; cons-truct a new list with the (car l1) 
           ; and the result of appending l2 to the 
           ; rest of l1, i.e., (cdr l1)
                (cons (car l1) 
                      (append-lists (cdr l1) l2) ) ) ) ) ) )

错放的d空间是什么?