Ocaml 为什么需要unit类型的表达式?

Ocaml 为什么需要unit类型的表达式?,ocaml,Ocaml,给定2010年到2019年之间的日期,函数应该返回对应于周日到周六的整数0到6。该功能基于2010年1月1日是星期五这一事实 如果year=2019,为什么结尾的else语句会引发整个正文的错误:“此表达式的类型为int,但表达式的类型应为unit” 让一周中的一天(年:整数)(月:整数)(日:整数):整数= 如果年份2019年,则以“超出范围的年份”失败 否则,如果月份12,则以“无效月份”失败 否则,如果日期28,则以“无效日期”失败 ) )否则,如果月份=2,则 如果日期>29,则以“无效

给定2010年到2019年之间的日期,函数应该返回对应于周日到周六的整数0到6。该功能基于2010年1月1日是星期五这一事实

如果year=2019,为什么结尾的else语句会引发整个正文的错误:“此表达式的类型为int,但表达式的类型应为unit”

让一周中的一天(年:整数)(月:整数)(日:整数):整数=
如果年份<2010年| |年>2019年,则以“超出范围的年份”失败
否则,如果月份<1 | |月>12,则以“无效月份”失败
否则,如果日期<1,则以“无效日期”失败
否则就是闰年那是真的吗(
如果月份=2,则(
如果日期>28,则以“无效日期”失败
)
)否则,如果月份=2,则
如果日期>29,则以“无效日期”失败
否则,如果月=4 | |月=6 | |月=9 | |月=11,则
如果日期>30,则以“无效日期”失败
否则,如果日期>31,则以“无效日期”失败
否则,如果年份=2010,则(
如果月份=1,则((第7天)+4天)第7天
否则,如果月份=2,则((31+天)模式7)+4)模式7
否则,如果月份=3,则((59+天)第7模式)+4)第7模式
否则,如果月份=4,则((90+天)mod 7)+4)mod 7
否则,如果月份=5,则((120+天)模式7)+4)模式7
否则,如果月份=6,则((151+天)mod 7)+4)mod 7
否则,如果月份=7,则((181+天)模式7)+4)模式7
否则,如果月份=8,则((212+天)mod 7)+4)mod 7
否则,如果月份=9,则((243+天)mod 7)+4)mod 7
否则,如果月份=10,则((273+天)mod 7)+4)mod 7
否则,如果月份=11,则((304+天)第7模式)+4)第7模式
其他((334+天)第7模式)+4)第7模式
)否则,如果年份=2011年,则(
如果月份=1,则((365+天)第7模式)+4)第7模式
否则,如果月份=2,则((365+31+天)mod 7)+4)mod 7
否则,如果月份=3,则((365+59+天)mod 7)+4)mod 7
否则,如果月份=4,则((365+90+天)mod 7)+4)mod 7
否则,如果月份=5,则((365+120+天)模式7)+4)模式7
否则,如果月份=6,则((365+151+天)模式7)+4)模式7
否则,如果月份=7,则((365+181+天)mod 7)+4)mod 7
否则,如果月份=8,则((365+212+天)mod 7)+4)mod 7
否则,如果月份=9,则((365+243+天)mod 7)+4)mod 7
否则,如果月份=10,则((365+273+天)mod 7)+4)mod 7
否则,如果月份=11,则((365+304+天)mod 7)+4)mod 7
其他((365+334+天)模式7)+4)模式7
)否则,如果年份=2012,则(
如果月份=1,则((730+天)第7模式)+4)第7模式
否则,如果月份=2,则((730+31+天)mod 7)+4)mod 7
否则,如果月份=3,则((730+60+天)模式7)+4)模式7
否则,如果月份=4,则((730+91+天)mod 7)+4)mod 7
否则,如果月份=5,则((730+121+天)模式7)+4)模式7
否则,如果月份=6,则((730+152+天)mod 7)+4)mod 7
否则,如果月份=7,则((730+182+天)模式7)+4)模式7
否则,如果月份=8,则((730+213+天)mod 7)+4)mod 7
否则,如果月份=9,则((730+244+天)mod 7)+4)mod 7
否则,如果月份=10,则((730+274+天)mod 7)+4)mod 7
否则,如果月份=11,则((730+305+天)mod 7)+4)mod 7
其他((730+335+天)7模式)+4)7模式
)否则,如果年份=2013,则(
如果月份=1,则((1096+天)第7模式)+4)第7模式
否则,如果月份=2,则((1096+31+天)mod 7)+4)mod 7
否则,如果月份=3,则((1096+59+天)mod 7)+4)mod 7
否则,如果月份=4,则((1096+90+天)mod 7)+4)mod 7
否则,如果月份=5,则((1096+120+天)mod 7)+4)mod 7
否则,如果月份=6,则((1096+151+天)mod 7)+4)mod 7
否则,如果月份=7,则((1096+181+天)mod 7)+4)mod 7
否则,如果月份=8,则((1096+212+天)mod 7)+4)mod 7
否则,如果月份=9,则((1096+243+天)mod 7)+4)mod 7
否则,如果月份=10,则((1096+273+天)mod 7)+4)mod 7
否则,如果月份=11,则((1096+304+天)mod 7)+4)mod 7
其他((1096+334+天)模式7)+4)模式7
)否则,如果年份=2014年,则(
如果月份=1,则((1461+天)第7模式)+4)第7模式
否则,如果月份=2,则((1461+31+天)mod 7)+4)mod 7
否则,如果月份=3,则((1461+59+天)mod 7)+4)mod 7
否则,如果月份=4,则((1461+90+天)mod 7)+4)mod 7
否则,如果月份=5,则((1461+120+天)mod 7)+4)mod 7
否则,如果月份=6,则((1461+151+天)mod 7)+4)mod 7
否则,如果月份=7,则((1461+181+天)mod 7)+4)mod 7
否则,如果月份=8,则((1461+212+天)mod 7)+4)mod 7
否则,如果月份=9,则((1461+243+天)mod 7)+4)mod 7
否则,如果月份=10,则((1461+273+天)mod 7)+4)mod 7
否则,如果月份=11,则((1461+304+天)mod 7)+4)mod 7
其他((1461+334+天)模式7)+4)模式7
)否则,如果年份=2015年,则(
如果月份=1,则((1826+天)mod 7)+4)mod 7
否则,如果月份=2,则((1826+31+天)mod 7)+4)mod 7
否则,如果月份=3,则((1826+59+天)mod 7)+4)mod 7
否则,如果月份=4,则((1826+90+天)mod 7)+4)mod 7
否则,如果月份=5,则((1826+120+天)mod 7)+4)mod 7
否则,如果月份=6,则((1826+151+天)mod 7)+4)mod 7
否则,如果月份=7,则((1826+181+天)mod 7)+4)mod 7
否则,如果一个月=
let day_of_week (year: int) (month: int) (day: int): int =
  if year < 2010 || year > 2019 then failwith "year out of range"
    else if month < 1 || month > 12 then failwith "invalid month"
    else if day < 1 then failwith "invalid day"
    else if is_leap_year year != true then (
            if month = 2 then (
                    if day > 28 then failwith "invalid day"
            )
    ) else if month = 2 then
            if day > 29 then failwith "invalid day"
    else if month = 4 || month = 6 || month = 9 || month = 11 then
            if day > 30 then failwith "invalid day"
    else if day > 31 then failwith "invalid day"
    else if year = 2010 then (
            if month = 1 then ((day mod 7) + 4) mod 7
            else if month = 2 then (((31 + day) mod 7) + 4) mod 7
            else if month = 3 then (((59 + day) mod 7) + 4) mod 7
            else if month = 4 then (((90 + day) mod 7) + 4) mod 7
            else if month = 5 then (((120 + day) mod 7) + 4) mod 7
            else if month = 6 then (((151 + day) mod 7) + 4) mod 7
            else if month = 7 then (((181 + day) mod 7) + 4) mod 7
            else if month = 8 then (((212 + day) mod 7) + 4) mod 7
            else if month = 9 then (((243 + day) mod 7) + 4) mod 7
            else if month = 10 then (((273 + day) mod 7) + 4) mod 7
            else if month = 11 then (((304 + day) mod 7) + 4) mod 7
            else (((334 + day) mod 7) + 4) mod 7
    ) else if year = 2011 then (
            if month = 1 then (((365 + day) mod 7) + 4) mod 7
            else if month = 2 then (((365 + 31 + day) mod 7) + 4) mod 7
            else if month = 3 then (((365 + 59 + day) mod 7) + 4) mod 7
            else if month = 4 then (((365 + 90 + day) mod 7) + 4) mod 7
            else if month = 5 then (((365 + 120 + day) mod 7) + 4) mod 7
            else if month = 6 then (((365 + 151 + day) mod 7) + 4) mod 7
            else if month = 7 then (((365 + 181 + day) mod 7) + 4) mod 7
            else if month = 8 then (((365 + 212 + day) mod 7) + 4) mod 7
            else if month = 9 then (((365 + 243 + day) mod 7) + 4) mod 7
            else if month = 10 then (((365 + 273 + day) mod 7) + 4) mod 7
            else if month = 11 then (((365 + 304 + day) mod 7) + 4) mod 7
            else (((365 + 334 + day) mod 7) + 4) mod 7
    ) else if year = 2012 then (
            if month = 1 then (((730 + day) mod 7) + 4) mod 7
            else if month = 2 then (((730 + 31 + day) mod 7) + 4) mod 7
            else if month = 3 then (((730 + 60 + day) mod 7) + 4) mod 7
            else if month = 4 then (((730 + 91 + day) mod 7) + 4) mod 7
            else if month = 5 then (((730 + 121 + day) mod 7) + 4) mod 7
            else if month = 6 then (((730 + 152 + day) mod 7) + 4) mod 7
            else if month = 7 then (((730 + 182 + day) mod 7) + 4) mod 7
            else if month = 8 then (((730 + 213 + day) mod 7) + 4) mod 7
            else if month = 9 then (((730 + 244 + day) mod 7) + 4) mod 7
            else if month = 10 then (((730 + 274 + day) mod 7) + 4) mod 7
            else if month = 11 then (((730 + 305 + day) mod 7) + 4) mod 7
            else (((730 + 335 + day) mod 7) + 4) mod 7
    ) else if year = 2013 then (
            if month = 1 then (((1096 + day) mod 7) + 4) mod 7
            else if month = 2 then (((1096 + 31 + day) mod 7) + 4) mod 7
            else if month = 3 then (((1096 + 59 + day) mod 7) + 4) mod 7
            else if month = 4 then (((1096 + 90 + day) mod 7) + 4) mod 7
            else if month = 5 then (((1096 + 120 + day) mod 7) + 4) mod 7
            else if month = 6 then (((1096 + 151 + day) mod 7) + 4) mod 7
            else if month = 7 then (((1096 + 181 + day) mod 7) + 4) mod 7
            else if month = 8 then (((1096 + 212 + day) mod 7) + 4) mod 7
            else if month = 9 then (((1096 + 243 + day) mod 7) + 4) mod 7
            else if month = 10 then (((1096 + 273 + day) mod 7) + 4) mod 7
            else if month = 11 then (((1096 + 304 + day) mod 7) + 4) mod 7
            else (((1096 + 334 + day) mod 7) + 4) mod 7
    ) else if year = 2014 then (
            if month = 1 then (((1461 + day) mod 7) + 4) mod 7
            else if month = 2 then (((1461 + 31 + day) mod 7) + 4) mod 7
            else if month = 3 then (((1461 + 59 + day) mod 7) + 4) mod 7
            else if month = 4 then (((1461 + 90 + day) mod 7) + 4) mod 7
            else if month = 5 then (((1461 + 120 + day) mod 7) + 4) mod 7
            else if month = 6 then (((1461 + 151 + day) mod 7) + 4) mod 7
            else if month = 7 then (((1461 + 181 + day) mod 7) + 4) mod 7
            else if month = 8 then (((1461 + 212 + day) mod 7) + 4) mod 7
            else if month = 9 then (((1461 + 243 + day) mod 7) + 4) mod 7
            else if month = 10 then (((1461 + 273 + day) mod 7) + 4) mod 7
            else if month = 11 then (((1461 + 304 + day) mod 7) + 4) mod 7
            else (((1461 + 334 + day) mod 7) + 4) mod 7
    ) else if year = 2015 then (
            if month = 1 then (((1826 + day) mod 7) + 4) mod 7
            else if month = 2 then (((1826 + 31 + day) mod 7) + 4) mod 7
            else if month = 3 then (((1826 + 59 + day) mod 7) + 4) mod 7
            else if month = 4 then (((1826 + 90 + day) mod 7) + 4) mod 7
            else if month = 5 then (((1826 + 120 + day) mod 7) + 4) mod 7
            else if month = 6 then (((1826 + 151 + day) mod 7) + 4) mod 7
            else if month = 7 then (((1826 + 181 + day) mod 7) + 4) mod 7
            else if month = 8 then (((1826 + 212 + day) mod 7) + 4) mod 7
            else if month = 9 then (((1826 + 243 + day) mod 7) + 4) mod 7
            else if month = 10 then (((1826 + 273 + day) mod 7) + 4) mod 7
            else if month = 11 then (((1826 + 304 + day) mod 7) + 4) mod 7
            else (((1826 + 334 + day) mod 7) + 4) mod 7
    ) else if year = 2016 then (
            if month = 1 then (((2191 + day) mod 7) + 4) mod 7
            else if month = 2 then (((2191 + 31 + day) mod 7) + 4) mod 7
            else if month = 3 then (((2191 + 60 + day) mod 7) + 4) mod 7
            else if month = 4 then (((2191 + 91 + day) mod 7) + 4) mod 7
            else if month = 5 then (((2191 + 121 + day) mod 7) + 4) mod 7
            else if month = 6 then (((2191 + 152 + day) mod 7) + 4) mod 7
            else if month = 7 then (((2191 + 182 + day) mod 7) + 4) mod 7
            else if month = 8 then (((2191 + 213 + day) mod 7) + 4) mod 7
            else if month = 9 then (((2191 + 244 + day) mod 7) + 4) mod 7
            else if month = 10 then (((2191 + 274 + day) mod 7) + 4) mod 7
            else if month = 11 then (((2191 + 305 + day) mod 7) + 4) mod 7
            else (((2191 + 335 + day) mod 7) + 4) mod 7
    ) else if year = 2017 then (
            if month = 1 then (((2557 + day) mod 7) + 4) mod 7
            else if month = 2 then (((2557 + 31 + day) mod 7) + 4) mod 7
            else if month = 3 then (((2557 + 59 + day) mod 7) + 4) mod 7
            else if month = 4 then (((2557 + 90 + day) mod 7) + 4) mod 7
            else if month = 5 then (((2557 + 120 + day) mod 7) + 4) mod 7
            else if month = 6 then (((2557 + 151 + day) mod 7) + 4) mod 7
            else if month = 7 then (((2557 + 181 + day) mod 7) + 4) mod 7
            else if month = 8 then (((2557 + 212 + day) mod 7) + 4) mod 7
            else if month = 9 then (((2557 + 243 + day) mod 7) + 4) mod 7
            else if month = 10 then (((2557 + 273 + day) mod 7) + 4) mod 7
            else if month = 11 then (((2557 + 304 + day) mod 7) + 4) mod 7
            else (((2557 + 334 + day) mod 7) + 4) mod 7
    ) else if year = 2018 then (
            if month = 1 then (((2922 + day) mod 7) + 4) mod 7
            else if month = 2 then (((2922 + 31 + day) mod 7) + 4) mod 7
            else if month = 3 then (((2922 + 59 + day) mod 7) + 4) mod 7
            else if month = 4 then (((2922 + 90 + day) mod 7) + 4) mod 7
            else if month = 5 then (((2922 + 120 + day) mod 7) + 4) mod 7
            else if month = 6 then (((2922 + 151 + day) mod 7) + 4) mod 7
            else if month = 7 then (((2922 + 181 + day) mod 7) + 4) mod 7
            else if month = 8 then (((2922 + 212 + day) mod 7) + 4) mod 7
            else if month = 9 then (((2922 + 243 + day) mod 7) + 4) mod 7
            else if month = 10 then (((2922 + 273 + day) mod 7) + 4) mod 7
            else if month = 11 then (((2922 + 304 + day) mod 7) + 4) mod 7
            else (((2922 + 334 + day) mod 7) + 4) mod 7
    ) else if year = 2019 then (
            if month = 1 then (((3287 + day) mod 7) + 4) mod 7
            else if month = 2 then (((3287 + 31 + day) mod 7) + 4) mod 7
            else if month = 3 then (((3287 + 59 + day) mod 7) + 4) mod 7
            else if month = 4 then (((3287 + 90 + day) mod 7) + 4) mod 7
            else if month = 5 then (((3287 + 120 + day) mod 7) + 4) mod 7
            else if month = 6 then (((3287 + 151 + day) mod 7) + 4) mod 7
            else if month = 7 then (((3287 + 181 + day) mod 7) + 4) mod 7
            else if month = 8 then (((3287 + 212 + day) mod 7) + 4) mod 7
            else if month = 9 then (((3287 + 243 + day) mod 7) + 4) mod 7
            else if month = 10 then (((3287 + 273 + day) mod 7) + 4) mod 7
            else if month = 11 then (((3287 + 304 + day) mod 7) + 4) mod 7
            else (((3287 + 334 + day) mod 7) + 4) mod 7
    )
if day > 28 then failwith "invalid day"
else if is_leap_year year != true && month = 2 && day > 28 then failwith "invalid day"
else . . .