方案改变树值 [英] Scheme changing tree values
问题描述
我需要实现一个叫做 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屋!