这是rebol的小作业——万年历。因为这门课是本专业第一年开,所以为学弟学妹留点学习资料。其实用rebol来做这个还是很简单的,因为它本身内置有很多日期类型的修饰字。我们可以输入“? now”进行查询。
下面先把源码贴上
REBOL [
title: Perpetual calendar
author: huming
version: 1.0.4
]
print { 请输入类似“query 2014 06 ” }
query: func [ a [integer!] b [integer!] ]
[
e: to-date reduce [ a b 1 ]
nian: pick e 1
yue: pick e 2
week1: e/weekday
k: 0
b: remainder nian 4
b3: remainder nian 100
if b3 = 0 [ b4: remainder nian 400
if b4 = 0 [ k: 1 ] ]
if ( b = 0 ) and ( b3 > 0) [ k: 1 ]
daysnum: [ 31 28 31 30 31 30 31 31 30 31 30 31 ]
daysnum1: pick daysnum yue
if yue = 2 [ if k = 1 [ daysnum1: 29 ] ]
i: 0
weekn: week1 - 1
print [ "^/"" " nian "年" yue"月日历" "^/" ]
while [ i < daysnum1 ]
[ i: i + 1
weekn: weekn + 1
m: remainder weekn 7
if m = 0 [ m: 7 ]
print [ " " i"号" " 周"m ]
]
]
然后运行
下面解释一下程序的主要思路。
用户输入两组数字——转换成日期格式——判断是否为闰年——闰年2月为29天——依次打印日期和周几
方法二:
还可以这样,把判断闰年的部分换掉,用每年的12月31号是一年中的第几天来判断是否2月为29天。
c: to-date reduce [ a 12 31 ]
weekc: c/yearday
either weekc = 366 [ k: 1 ] [ k: 0 ]
欢迎大家多提修改意见,越简洁越好!