Поскольку molbdnilo уже предоставил ответ, вот альтернативный способ сделать это, используя records :
type rgb = { r : int, g : int, b : int }
fun rgb2gray (color : rgb) : int =
(#r color * 3 +
#g color * 6 +
#b color) div 10
или эквивалентно путем сопоставления с образцом в записях:
fun rgb2gray ({ r = r, g = g, b = b } : rgb) : int =
(r * 3 + g * 6 + b) div 10
Записи похожи на кортежи, но их части именуются, а не нумеруются (следовательно, #r
вместо #1
). Синтаксис немного сложнее, но с другой стороны, вы не случайно смешиваете два цвета так же легко. Возможно, для значений RGB их все равно сложно смешать, поскольку понятия R, G и B в этом точном порядке довольно укоренились во многих программистах. Тем не менее, это еще один вариант.