【发布时间】:2016-10-19 14:12:20
【问题描述】:
-
编写一个函数(make-phone-book name number left right),它接受一个名字、一个电话号码和左右子树,并创建一个新的电话簿树。您的树节点应采用 ((name . phone-number) left-tree right-tree) 形式,其中 name 和 phone-number 是一对。
我明白了:
(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=? ' , '字符串>? ' 和 ' 字符串
(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)
【问题讨论】:
-
你违反了合同。它需要一个
(cons/c pair? any/c),而你提供给它的是'("Harry" 5550011)
标签: scheme containers binary-tree