racket - 从 SML 转换为球拍的插入语句不起作用
问题描述
我已经非常深入地学习了 SML,并且了解了球拍和 SML 之间的相似之处,我现在正在尝试将我过去的一些 sml 项目转换为球拍,这个涉及二叉树。
在 SML 中,我尝试转换为 Racket 的以下二叉树和函数如下:
datatype 'a bin_tree =
Leaf of 'a
| Node of 'a bin_tree (* left tree *)
* int (* size of left tree *)
* int (* size of right tree *)
* 'a bin_tree (* right tree *)
val tree1 =
Node(Node(Node(Leaf 47, 1, 1, Leaf 38),
2,1,
Leaf 55),
3,2,
Node(Leaf 27, 1, 1, Leaf 96))
val tree1false =
Node(Node(Node(Leaf 47, 1, 1, Leaf 38),
2,1,
Leaf 55),
4,2,
Node(Leaf 27, 1, 1, Leaf 96))
val tree2 =
Node(Node(Leaf 55,
1,2,
Node(Leaf 47, 1, 1, Leaf 38)),
3,2,
Node(Leaf 27, 1, 1, Leaf 96))
val tree3 =
Node(Node(Node(Leaf 47, 1, 1, Leaf 38),
2,2,
Node(Leaf 55, 1, 1, Leaf 54)),
4,2,
Node(Leaf 27, 1, 1, Leaf 96))
fun insert newValue (Leaf n) = Node(Leaf newValue, 1, 1, Leaf n)
| insert newValue (Node(left, l, r, right)) =
if (l <= r)
then (Node(insert newValue left, l + 1, r, right))
else
(Node(left, l, r + 1, insert newValue right));
在 SML 中,上述所有功能均正常运行,在球拍中,除插入物外,所有功能均正常运行,请帮助:
#lang racket
(provide Leaf)
(provide Node)
(provide size)
(provide verify)
(provide imbalances)
(provide insert)
(provide test1)
(provide test1false)
(provide test2)
(provide test3)
(struct Leaf (content))
(struct Node (left lsize rsize right))
(define test1
(Node (Node (Node (Leaf 47) 1 1 (Leaf 38))
2 1
(Leaf 55))
3 2
(Node (Leaf 27) 1 1 (Leaf 96))))
(define test1false
(Node (Node (Node (Leaf 47) 1 1 (Leaf 38))
2 1
(Leaf 55))
4 2
(Node (Leaf 27) 1 1 (Leaf 96))))
(define test2
(Node (Node (Leaf 55)
1 2
(Node (Leaf 47) 1 1 (Leaf 38)))
3 2
(Node (Leaf 27) 1 1 (Leaf 96))))
(define test3
(Node (Node (Node (Leaf 47) 1 1 (Leaf 38))
2 2
(Node (Leaf 55) 1 1 (Leaf 54)))
4 2
(Node (Leaf 27) 1 1 (Leaf 96))))
(define (insert x tree)
(cond
[(Leaf? tree) 0]
[(Node? tree) (<= (Node-lsize tree) (Node-rsize tree)) (Node ((insert x (Node-left tree)) (+ (Node-lsize tree) 1) (Node-rsize tree) (Node-right tree)))]
[else (Node ((Node-left tree) (Node-lsize tree) (+ (Node-rsize tree) 1) ((insert x (Node-right tree)))))]
))
解决方案
推荐阅读
- java - 使用 OKHttp 发出 GET 请求时出现“无法执行 android:onClick 的方法”异常
- python - 逻辑错误 - 检查一个词是否可以由另一个词组成
- asp.net-core-mvc - 如何验证对 Piranha.WebApi 的调用?
- azure - 是否可以将公共 Github 存储库(或其中的几个文件)合并到我的 Azure Devops repro 和 Pipelines 中?
- c# - 编译器无法将 C# 类成员识别为列表
- css - 是否可以在 Angular 中使用 :host 和 Encapsulation.None 来设置样式?
- c# - 在 C# 属性中构建字典
- excel - 开发的带有密码保护的 VBA 代码 VBAProject 需要通过 VBA 代码更改为已知密码
- pandas - 按部分整数 Pandas 过滤
- python - 具有偏移管理的 Python Kafka 消费者