我是新來的SML,並不完全理解我的問題,雖然我確定我有錯。首先,這裏是我測試的兩個簡短功能及其描述。SML錯誤:操作符和操作數不一致[tycon不匹配]
MakeInterval - 注意到的自然數- [R,(也可用於RP)和自然數噸,並返回的時間間隔[T-R,T + R]。
fun MakeInterval(r,rp,t) =
if r + rp < 0 then []
else t-r :: MakeInterval(r-1,rp,t);
例如, MakeInterval(3,3,10)將返回[7,8,9,10,11,12,13]。如果您有建議要擺脫rp,請告訴我。這是我能夠想到的唯一方法,在保持排序順序的同時跟蹤原始值r。
NotDivisible - 採用自然數[R,自然數TS1列表和自然數TS2的另一個列表。尚未編寫使用ts2的代碼。
- [R指定區間的下界和上界,(同MakeInterval)和TS1是號碼的列表被送入地圖與MakeInterval功能。
fun NotDivisible(r, ts1, ts2) =
map (fn x => MakeInterval(r,r,x), ts1);
該函數應返回間隔列表。例如。 NotDivisible(3,[10,20,30], [2,4,6])將返回(現在)[[7..13],[17..23],[27..33]]。
當我得到這個工作後,我將開始操作這些列表,找出這些間隔中哪些數字不可被ts2中的任何數字所不可分割。
但現在,我的問題在於我有他們的函數定義。 MakeInterval定義沒有問題,我已經測試它自己。這是試圖定義NotDivisible當我收到錯誤:
stdIn:5.33-5.71 Error: operator and operand don't agree [tycon mismatch]
operator domain: 'Z -> 'Y
operand: (int -> int list) * 'X
in expression:
map ((fn x => MakeInterval <exp>),ts1)
我已經試過手動指定各類無濟於事。從邏輯上講,一切都很有意義,但顯然這裏有一個我沒有遵循的語法問題。
太棒了!謝謝。有趣的是,這樣一個小小的錯誤能讓我回到幾個小時。 –