编写一个功能(制作电话簿名称编号左侧),其中包含姓名,电话号码以及左右子树,并创建新的电话簿树。您的树节点应该是((名称。电话号码)左树右树)的形式,其中名称和电话号码是一对。
我得到了:
(define (make-phone-book name number left right)
(list (cons name number) left right))
编写函数get-name,get-number,get-left和get-right,它们返回给定电话簿中的相应数据。
我得到了:
(define (get-name book)(caar book))
(define (get-number book)(cdar book))
(define (get-left book)(cadr book))
(define (get-right book)(cddr book))
编写一个功能(插入图书名称编号),将新条目插入电话簿。你可以使用内置函数'string =? ','string>? '和'字符串
(define (insert book name number)
(cond
((null? name) make-phone-book name number '() '())
((string=? (get-name book) name) book)
((string<? (get-name book) name) (make-phone-book name number
(insert (get-left book) name number)
(get-right book)))
((string>? (get-name book) name) (make-phone-book name number
(get-left book)
(insert (get-right book) name
number)))))
它给出错误:
caar: contract violation
expected: (cons/c pair? any/c)
given: '("Harry" 5550011)
答案 0 :(得分:0)
有几个小错误。
(null? name)
应为(null? book)
。(make-phone-book name number '() '())
(get-name book)
和(get-number book)
传递给make-phone-book
,而不是name
和number
。测试时,只能使用make-phone-book
和insert
来创建树
不要手工写树。