【问题标题】:Removing Item from List in Scheme leaves empty null list element从 Scheme 中的 List 中删除 Item 会留下空的 null 列表元素
【发布时间】:2014-11-07 23:09:35
【问题描述】:

我有以下代码:

 (define (atom? x)
   (and (not (null? x))
   (not (pair? x)))) 


 (define delete 
   (lambda (atom l)
     (cond
       ((null? l) '())
       ((atom? l) 
        (cond 
          ((not(eq? atom l)) l)
          (else '())
        )
       ) 
       (else (cons (delete atom (car l)) (delete atom (cdr l))) )
     )
   )  
  ) 

目标是从此列表中删除某个字符。例如,

 (delete 'a '(a b a) )  ==> (b)

我得到的不是这个:

  (delete 'a '(a b a) )==> (() b ())

我是全新的方案。如果找到该值,我尝试不返回任何内容,但这只是使其行为类似于:

 (delete 'a '(a b a) )==> (#<void> b #<void>)

有什么想法吗?非常感谢!

【问题讨论】:

    标签: list scheme cons


    【解决方案1】:
     (define delete
          (lambda (atom l)
               (cond
                    ((null? l) '())
                    ((atom? (car l))
                         (cond
                              ((eq? atom (car l)) (delete atom (cdr l)))
                              (else (cons (car l) (delete atom (cdr l))))
    
                         )
                    )
                    (else (cons (delete atom (car l)) (delete atom (cdr l))))
                )
          )
      )  
    

    这个解决方案更基础,更容易从基础上理解。

    【讨论】:

    • 另外,这个答案是错误的。如果您使用我的解决方案中的示例对其进行测试,您会发现它为更复杂的列表提供了不正确的结果。我的解决方案更精细是有原因的:这个问题并不容易,给出一个看似简单但不正确的解决方案对任何人都没有好处。
    猜你喜欢
    • 2012-11-13
    • 1970-01-01
    • 2014-01-06
    • 2014-12-19
    • 2016-01-05
    • 1970-01-01
    • 2012-01-23
    • 1970-01-01
    相关资源
    最近更新 更多