मैं कोड के इस बिट है:एसएमएल सूची समानता विचित्रता
fun foldr2(f, x::xs) =
if xs = [] then
x
else
f(x, foldr2(f, xs))
प्रकार हस्ताक्षर
(''a * ''a -> ''a) * ''a list -> ''a
बहुत सीधी-सपाट लग रहा है के साथ, यह एक समारोह है कि समानता के प्रकार और एक सूची पर काम करता है लेता है xs = []
तुलना की वजह से समानता प्रकार के तर्क के रूप में। हालांकि, किसी कारण से यह (op +, [2.3, 2.7, 4.0])
जैसे इनपुट पर काम करता है, जब एसएमएल/एनजे वास्तविक में समानता प्रकार नहीं होते हैं। क्या कोई मुझे इस प्रकाश का कारण बनने पर कुछ प्रकाश डालने में मदद कर सकता है?
+1, मुझे आश्चर्य है कि यह क्यों काम करता है। ऐसा लगता है जैसे एसएमएल/एनजे हालत ब्लॉक को "शून्य [2.3, 2.7, 4.0]" या इसी तरह का अनुवाद करता है। –