【发布时间】:2015-11-25 04:45:19
【问题描述】:
我正在使用带有列表缩写的开头语言
我希望我的程序做的是消耗 BST(课程)和自然数(上限)并生成类 是满的。如果课程中至少有人数上限的学生,则该课程被视为已满
这是我到目前为止所做的:
BST 要么是空的,要么是
(make-node Nat (listof Nat) BST BST),
递归满足排序属性:
左边的每个 course-id 都小于 course-id
右边的每个 course-id 都大于 course-id
要求:
10000
studlist 中的每个元素都在 100000000 和 999999999 之间
inclusive,代表学生的ID
参加了课程。
(define-struct node (key val left right))
辅助函数,统计班级学生人数:
(define (count-students alist)
(cond
[(empty? alist) 0]
[(cons? (car alist))(+(count-students(car alist))
(count-students(cdr alist)))]
[else(+ 1(count-students(cdr alist)))]))
主要功能:
(define (count-full-courses courses cap)
(cond
[(empty? courses)0 ]
[else (cond
[(or (=(count-students(node-val courses))cap)
(>(count-students(node-val courses))cap))(add1(+
(count-full-courses (node-left courses)cap)
(count-full-courses (node-right courses)cap)))]
应该发生的事情的例子:
(define c89761 (make-node 89761 (list 987654321 673498453 237622334) empty empty))
(define c99800 (make-node 99800 (list 673498453 673498453 876542334 777777777)empty empty))
(define c99500 (make-node 99500 (list 987654321 673498453 673498453 876542334)empty c99800))
(define c99999 (make-node 99999 (list 987654321 673498453 444444444)c99500 empty))
(define DB (make-node 99065 (list 123456789 987654321 673498453 876542334)c89761 c99999))
(count-full-courses DB 4) should produce 3
【问题讨论】: