2016-04-04 3 views
-1

Я новичок в Haskell и попросил моего профессора для некоторых упражнений помочь мне в обучении. Он дал мне кое-что о манипуляциях с изображениями. У меня есть несколько изображений, созданных с использованием строк в Haskell, например.Haskell: получение размера изображения

pic :: Int -> Pic 
pic 1 = [" #### ", 
     " ## ## ", 
     " #### "] 

Я хочу получить размер изображения, например. ширина 9 высота 3 дюйма (9,3). Определение как

sizePic :: Pic -> (Int, Int)

Высота просто с помощью функции Length. Высота :: Pic -> Int Высота = длина

Ширина У меня проблемы с. Ширина :: Pic -> Int Ширина =

Я просто хочу, чтобы длина головы, чтобы показать (все строки одинаковой длины)

любые идеи.

+0

попробовать 'максимум. длина карты ', или если вы уверены, что изображение является допустимым и взвешенным: 'length. first' – Carsten

+0

@Carsten 'max' является двоичным,' максимум' принимает список – chi

+0

@chi ... thanks (self-facepalm) - это происходит, если вы не проверяете и не полагаетесь на свой глупый мозг;) – Carsten

ответ

1

это не собирается, чтобы помочь вам, как новичок, но дать вкус того, что можно сделать

> import Control.Arrow 
> (length &&& (length . head)) s 
(3,9) 

вы можете написать свою версию, как

type Pic = [String] 

sizePic :: Pic -> (Int, Int) 
sizePic [] = (0,0) 
sizePic (x:xs) = (1+length xs, length x) 
1

Подсказка №1: Строки в Haskell - это списки Char s. То есть каждая строка в вашем «изображении» равна [Char].

Подсказка №2: Чтобы получить ширину, вы должны применить length к первой (или последней или любой другой) линии.

+1

Мне нравится ваш вход, я думаю, что он более конструктивен, чем ответ, но, как я только что сказал, я не думаю, что это ответ. – MasterMastic

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