【问题标题】:Scheme obtain an element's depth into recursive listsScheme 获取元素在递归列表中的深度
【发布时间】:2017-05-10 19:50:39
【问题描述】:

你好,我已经想过并做了一个练习:

定义一个函数,它接受一个列表作为第一个参数,该列表可以包含原子和递归列表,第二个参数是一个原子。原子的值不会重复。函数返回原子在列表中的位置,如果不存在则返回零。你应该使用列表吗?

 Ejemplo

(profundidad 
‘(c a b (r t) f (1 ((3 4) 5)
 a)
returns:
1  
(profundidad 
‘(c a b (r t) f (1 ((3 4) 5)
 k)
returns:
0  
(profundidad 
‘(c a b (r t) f (1 ((3 4) 5)
 t)
returns:
2  
(profundidad 
‘(c a b (r t) f (1 ((3 4) 5)
 4)
returns:
4  

我的代码:

(define (profundidad L c)
    (cond
        ((null? L) 0)
        ((equal? (car L) c) 1)
        ((list? (car L)) (+ (profundidad (car L) c) 1))
    (else(profundidad (cdr L) c))))

它可以很好地解析普通列表,但我如何递归地从内部列表返回?

感谢您的宝贵时间!

【问题讨论】:

    标签: scheme


    【解决方案1】:

    您的问题是,如果car 上的递归是zero?,您需要执行与else 情况相同的操作。当第一个元素是list?时你应该怎么做:

    (let ((car-result (profundidad (car L) c)))
      (if (zero? car-result)
          (profundidad (cdr L) c)
          (+ 1 car-result)))
    

    【讨论】:

    • 谢谢 Sylwester,你让我意识到出了什么问题,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-21
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多