从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,Leaf 38),2,Leaf 55),3,Node(Leaf 27,Leaf 96))

val tree1false =
  Node(Node(Node(Leaf 47,4,Leaf 96))

val tree2 =
  Node(Node(Leaf 55,Node(Leaf 47,Leaf 38)),Leaf 96))

val tree3 =
  Node(Node(Node(Leaf 47,Node(Leaf 55,Leaf 54)),Leaf 96))
       
fun insert newValue (Leaf n) = Node(Leaf newValue,Leaf n)
  | insert newValue (Node(left,l,r,right)) =
      if (l <= r)
        then (Node(insert newValue left,l + 1,right))
      else
        (Node(left,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)))))]

    ))

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...