定义一个函数(可能的Schedule),它接受一个参数Schedule,并返回#T或#F。 Schedule是(stage start_time stop_time)三元组的列表,其中每个阶段是正整数,每个start_time和stop_time是0-2399范围内的整数,表示节目的开始和停止时间,使用24小时时间。如果可以执行时间表,该函数应返回#T - 即,如果时间表不包含冲突 - 否则为#F。
您可以假设在调用函数时列表Schedule的格式正确;您不必错误检查非列表或错误形成的列表。列表计划中的事件不一定按阶段编号,开始时间或任何其他顺序排序。在您的程序中,您可以编写和调用任何有助于计算的附加函数。
示例:
(possible '(
(1 1030 1100)
(2 900 1000)
(3 1400 1430)
))
应该返回#T,
(possible '(
(1 900 930)
(2 900 1000)
(3 1400 1430)
))
应该返回#F,
(possible '(
(7 1130 1200)
(12 900 1000)
(2 1500 1530)
(2 1430 1500)
))
应该返回#T和
(possible '(
(7 1130 1200)
(12 900 1000)
(2 1500 1530)
(5 1430 1500)
))
应该返回#F。
我尝试创建一个修复列表,如:
定义(安排车) (附表'(((1 1030 1100)(2 900 1000)(3 1400 1430))) 前三个时间表返回#T
答案 0 :(得分:3)
好问题;可惜你没有向我们展示你所做的努力(如果有的话)。以下是Racket中的一个示例:
(define (possible schedule)
; sort by start time
(let ((s (sort schedule < #:key cadr)))
(andmap (lambda (f s)
; either end time of first < start time of second
(or (< (caddr f) (cadr s))
; or they are equal AND it's the same stage
(and (= (caddr f) (cadr s)) (= (car f) (car s)))))
(drop-right s 1)
(cdr s))))