在Scheme中编写一个函数,该函数接收作为条目参数的学生结构实例的二叉搜索树 ,一个出生年份列表,并返回一个代码列表列表,表明每年提供的出生日期。
示例:
这是二叉树
(make-árbol-bin
(make-estudiante 5 "35889188" "Victor" (make-fecha 10 6 1991) "calle 67 con cra 20" "4444444") (make-
árbol-bin
(make-estudiante 2 "6457234" "Manuel" (make-fecha 12 10 1992) "calle 56 con cra 33" "5555555") (make-árbol-bin
(make-estudiante 1 "94252688" "Estela" (make-fecha 20 5 1993) "calle 4 con cra 2" "3333333") empty empty) empty)
(make-árbol-bin
(make-estudiante 7 "34987678" "Juan" (make-fecha 25 3 1995) "calle 34 con cra 12" "6666666") empty
empty)
)
列出年份
(list 1992 1991 )
它应该返回一个代码列表列表:
((list (list 2) (list 5) )
我做了这个,但我不能让我返回列表列表
(define-struct fecha ( dia mes año))
这是学生的结构:
(define-struct estudiante ( codigo id nombre fechanaci direccion telefono))
这是二叉搜索树的结构:
(define-struct arbol-bin( estudiante nod-izq nod-der))
我做了这个
(define (elimina X L)
(if(null? L) '()
(if (equal? X (car L))
(elimina X (cdr L))
(cons (car L) (elimina X (cdr L))))))
(define (busca d tree)
(if (null? tree)
#f
(let ((node (arbol-bin-estudiante tree)))
(let ((n (estudiante-codigo node)))
(let ((fe (estudiante-fechanaci node)))
(if (or(equal? d (fecha-año fe))
(busca d (arbol-bin-nod-der tree)))
n
(busca d (arbol-bin-nod-izq tree))))))))
(define (pert lst tree)
(elimina false (map (lambda (d) (busca d tree)) lst)))
和这个
(pert (list 1992 1991 ) tree)
返回
(list 2 5)
我能做的就是让我回复:
((list (list 2) (list 5) )
请帮助我!
答案 0 :(得分:0)
您无法返回((list (list 2) (list 5)))
,因为它不是正确的Scheme表达式。你可以让它返回(list (list 2) (list 5))
:
> (list (list 2) (list 5))
'((2) (5))
为此,在busca
中,只需将n
替换为(list n)
:
(define (busca d tree)
(if (null? tree)
#f
(let ((node (árbol-bin-estudiante tree)))
(let ((n (estudiante-codigo node)))
(let ((fe (estudiante-fechanaci node)))
(if (or (equal? d (fecha-año fe))
(busca d (árbol-bin-nod-der tree)))
(list n) ; <------
(busca d (árbol-bin-nod-izq tree))))))))
或
> (list (list (list 2) (list 5)))
'(((2) (5)))
将上述行更改为(list (list n))
。