好吧,我在这所大学参加这个计划课程,我们刚刚完成了第一个任务。虽然我遇到了这个奇怪的事情。有时程序会冻结,什么都不做,没有给我任何形式的警告,为什么这是...计划程序冻结,没有例外
采取以下步骤:
(define (calc-week-day y1 m d w y2) ; anta y2 > y1
(define (days-between-months m1 m2 y)
(if (= m1 m2)
0
(+ (month-length y m1) (days-between-months (+ m1 1) m2 y))))
(define (days-between-years y1 y2)
(if (= y1 y2)
0
(+ (year-length y1) (days-between-years (+ y1 1) y2))))
(define (days-til-months-end d m y)
(- (month-length y m) d))
(define (calculate-day day offset)
(cond ((> day 6) (calculate-day 0 (- offset 1)))
((= offset 0) day)
(else (calculate-day (+ day 1) (- offset 1)))))
(define dager-til-nyttår (+ (days-between-months m 12 y1)
(days-til-months-end d 12 y1) 1))
(define dager-fra-nyttår (+ (days-between-months 1 m y2) d 2))
(define dager-mellom-datoer (+ dager-til-nyttår (days-between-years y1 y2)
dager-fra-nyttår))
(num->day (calculate-day (day->num w) dager-mellom-datoer)))
calc-week-day
基本上需要两年的时间,其中y2 > y1
始终。 m =月,d =日和w =星期几(星期一,星期二...)该函数计算出y1
和y2
中的同一日期之间的天数差异,并计算出星期几y2
中的日期。 ..
此过程不起作用,因为它应该。这实际上不会产生任何输出。但是,如果我从(define dager-fra-nyttår ...)
中删除最后一位数字(2),它将工作得很好,并在输出屏幕上生成一周中的某一天(但不是正确的日期)。
任何人都知道这是为什么? (在Mac OSX Lion上使用Racket 5.2)
你有任何助手功能的测试用例吗?你知道你的辅助函数是否有效吗?这不像起初看起来似乎是一个轻浮的问题。我不相信计算日会在所有预期条件下终止。例如,如果你通过一天大于6的偏移量和一个等于零的偏移量,它将不会终止。顺便说一下,如果您使用的是DrRacket,请尝试按下“停止”按钮。它应该通常告诉你你的程序在哪里计算。可能会提示发生无限循环的位置。 – dyoo
这个帮手是由proffessor编写的,已经使用了至少几年,所以我认为他们工作的广告,即使没有提供测试用例... –
“帮助函数”,我的意思是所有内部定义的函数在calc-week-day中。据推测,你的教授没有写这些,否则还有什么是你要做的? :)另外,当你在追踪看起来像无限循环的东西时寻求帮助时,请提供示例输入,以便希望提供帮助的人员可以复制您的场景。你周日输入的是什么输入数据,如果程序运行正常,你期望看到什么? – dyoo