2013-10-12 4 views
1

Я новичок в SML, и я написал программу, которая занимает два года и сравнивает их, затем занимает два месяца и сравнивает их, и, наконец, две даты.Вложенный оператор if не работает в SML

Проблема заключается в том, что если год старше, чем первый, он должен остановиться и false, но некоторые из них не уверены, является ли это моей логикой или что-то еще продолжает проверять месяцы, а затем даты, прежде чем возвращать true или ложный.

Я хочу, чтобы он проверял только месяц, если год является ложным, и проверяйте только день, если месяц является ложным.

fun is_older(year1 : int, month1 : int, day1 : int, year2 : int, month2 : int, day2 : int) = 
if year1 < year2 andalso year1 > 0 
then true 
else 
    if month1 < month2 andalso month1 > 0 andalso month2 <= 12 
    then true 
else 
    if day1 < day2 andalso day1 > 0 andalso day2 <= 31 
    then true 

else false; 

ответ

1

Я предполагаю, что вы пытаетесь сравнить две даты в году и вернуть значение true/false. То, что вы сделали, в основном правильное. В своем втором заявлении if вы хотите проверить, month1<month2, только если year1=year2. В противном случае, даже если year1 = 2014 и year2 = 2013, вы получите истинное значение, если их месяц согласуется с вашим вторым оператором if.

Аналогичным образом, в вашем третьем заявлении if вы хотите проверить дни, только если year1=year2 andalso month1=month2.

+0

Это сработало Спасибо –

Смежные вопросы