2013-01-18 84 views
0

我是SML的新手,並且通過它做家庭作業。 「編寫一個函數number_in_month,它包含日期和月份列表(即int),並返回列表中給定月份中的多少個日期。」SML中的遞歸

這就是我的工作,看不出有什麼問題。請幫忙。

`

fun number_in_month (dates: (int*int*int) list,month:int) = 
    if ((#2 (hd dates)) = month) 
    then val flag=1 flag+number_in_month(tl dates, month) 
    else number_in_month((tl dates),month)` 

REPL告訴:與EQUALOP替換VAL。

回答

2

你不能以這種方式綁定變量。變量的綁定是一個聲明,因此不能在需要表達式的地方完成。

在這種情況下,你必須使用let-在高端表達

fun foo x = 
    let 
    val a = 42 
    in 
    a*x 
    end 
0

從REPL錯誤信息是混亂的,但加斯帕是正確的,你應該,如果你使用讓-在年底的表達,需要在函數中賦值語句。那肯定會讓你的錯誤得到解決。

0

你的問題是無窮的遞歸。編譯器無法擺脫它,因爲結果independ if..then..else你再次運行功能 試試這個:

​​
1

我嘗試自己解決它,那是我的解決方案:

樂趣number_in_month(迪亞斯:(INT * INT * INT)名單,MES:INT)= 如果空迪亞斯 然後0 否則,如果((#2(HD迪亞斯))= MES) 然後讓VAL標誌= 1 + number_in_month(tl dias,mes) in flag end else number_in_month((tl dias),mes)

我希望你也可以用它!