如何在Sheme中更新列表。我的意思是将物品建在预先存在的清单上,一次使用汽车

时间:2019-01-31 17:38:36

标签: 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中的项目附加到NewL,但一次添加一次。

我尝试过,追加,追加!设置并设置!

( 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 )

1 个答案:

答案 0 :(得分:2)

我想你可能会难度比它必须使它;在类似于方案的函数式编程风格中,我们使用cons之类的函数从现有列表中派生出新列表。

此外,在以函数式编程风格进行编写时,我们通常不使用破坏性更新类型的函数,例如append!或任何“!”功能。

您走在正确的轨道上,但请尝试从现有列表中派生新列表的方式来考虑问题:尝试编写一个函数,该函数接受两个输入列表(例如l1和l2)并生成一个列表它由l1中的所有元素组成,后跟l2中的所有元素。您上面的Update_List函数表明,您仍在从命令式编程(包括破坏性更新)的角度考虑问题,这通常不是Scheme(以及一般的函数式编程)如何完成的。

我知道这不是您问题的直接答案,但这似乎是一项家庭作业,我希望这会给您一些提示,让您了解从哪里开始/重新开始您的解决方案。挣扎了一下得到的回答可以帮助的原则,坚持更好,你学习他们更好的方式。

已编辑:

我对不住你:我想你可能是一个学生在家庭作业工作,但后来我看到您的其他问题here

我仍然鼓励您在继续阅读之前考虑一下我刚才所说的内容,因为学习是在斗争中发生的。

SO:不要试图真的很难考虑一下我上面建议之前阅读任何进一步




在这里,我将如何编写一个如上所述的函数:

(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) ) ) ) ) ) )