3

我目前正试图在练习中期解决一个问题。该问题要求我编写一个表达式来附加两个列表(我们称它们为 list1 和 list2),并且 list2 必须附加到 list1 的末尾。函数 append 在此的任何时候都不能使用。我可能使用的是consfilteraccumulatemap、list-ref 和 inumerate-interval。我尝试了各种形式的解决方案,例如

(cons list1 list2)

(filter list? (map list (cons list1 list2)))

(list list1 list2)

(map list (list list1 list2)) 

我花了 2 天时间试图找到一个无济于事的解决方案。如果有人能够指导我朝着正确的方向前进,甚至可以为我提供某种形式的帮助,我将不胜感激。

另外,如果我在代码格式或提问时的举止方面没有正确遵循某些协议,我深表歉意,因为我是该网站的新手。谢谢你。

4

1 回答 1

2

因为这是作业,我不能给你一个直接的答案。相反,我会给你一些提示,你可以在空白处找到你自己问题的答案。这是实现的标准方法append

(define (my-append l1 l2)
  (cond (<???>                          ; if the first list is null
         <???>)                         ; then return the second list
        (<???>                          ; if the second list is null
         <???>)                         ; then return the first list
        (else                           ; otherwise `cons`
         (cons <???>                    ; the first element of the first list
               (my-append <???> l2))))) ; process the rest of the first list

上述解决方案使用condnull?cons和。如果您不能使用其中任何一个并且您仅限于问题中的程序,请尝试使用此方法(假设定义为向右折叠):carcdraccumulate

(define (my-append l1 l2)
  (accumulate
   <???>   ; what should be used for sticking list elements together?
   <???>   ; what should we return if the list being traversed is empty?
   <???>)) ; this is the list that we want to traverse 

上述解决方案仅根据问题中的要求使用accumulateand cons。这个想法是:遍历第一个列表,逐个元素地重新创建它,直到列表用尽 - 那时,下一个元素将是第二个列表。

于 2012-11-18T03:44:24.523 回答