方案改变树值 [英] Scheme changing tree values

查看:28
本文介绍了方案改变树值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要实现一个叫做 inverse-tree 的过程来接收一棵树其节点数据值为数字和布尔值,并返回等效值其节点满足以下条件的树:

I need to implement a procedure called inverse-tree that receives a tree whose nodes data values are numbers and booleans and returns the equivalent tree whose nodes satisfy the following:

  • 如果原始树的等价节点是一个数字,那么结果树的节点是-1·那个节点值
  • 如果原始树的等效节点是布尔值,则结果树的节点是该节点值的逻辑非

示例:

> (inverse-tree ’())
’()
> (inverse-tree ’(5))
’(-5)
> (inverse-tree ’(0))
’(0)
> (inverse-tree ’(#f))
’(#t)
> (inverse-tree ’(#t))
’(#f)
> (inverse-tree ’(-5 (1 (-2) (3) (#f)) (#t)))
’(5 (-1 (2) (-3) (#t)) (#f))

Scheme 中(可能是空的或不完整的)树的表示如下:每个嵌套级别的第一个元素表示子树的根.其余元素是子元素(当然,每个元素都是一棵树).叶子由只有一个元素(叶子值)的列表表示.一个完全空的树由空列表表示.

The representation of a (possibly empty or non-complete) tree in Scheme is as follows: the first element in every nesting level represents the root of the sub-tree. The rest of the elements are the children (each of them is a tree, of course). A leaf is represented by a list with only one element (the leaf value). A completely empty tree is represented by the empty list.

改变树值的方案处获得更多信息.

推荐答案

经过大量挖掘和更好地理解语法后,我想出了一个简单的 1 函数解决方案:

After a lot of digging and understanding the syntax better I cam up with a simple 1 function solution:

(define (inverse-tree tree)
  (cond ((eq? '() tree) '())
        ((pair? tree) 
         (cons (inverse-tree (car tree))
                    (inverse-tree (cdr tree))))
        (else ((lambda(x) (if (boolean? x) (not x) (- x))) tree))))

这篇关于方案改变树值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆