Проще устроиться в стартап и в один прекрасный день внезапно может оказаться, что вы работаете на гугл. Если гугл купил ваш стартап вместе с вами. Знать бы только наперед, какие стартапы купят :)
mac-ports практически тот же portage, тоже все собирается из исходников, есть аналог USE-флагов.
По моему личному опыту с ним проблем гораздо меньше даже чем с portage'ем. Тоже раньше пользовался Gentoo несколько лет, перешел на мак и ни разу не пожалел, все удобно и привычно и работает из коробки.
А зачем приплетать списки, если и без них всё хорошо через те же аксиомы Пеано?
data Nat = Zero | Succ Nat deriving (Eq, Show)
instance Num Nat where
Zero + a = a
a + Zero = a
a + Succ b = Succ (a + b)
Zero * a = Zero
a * Zero = Zero
a * Succ b = a*b + a
abs = id
signum Zero = 0
signum _ = 1
fromInteger 0 = Zero
fromInteger (x+1) = Succ (fromInteger x)
Это вы передёргиваете, кандидатам было подробно обьяснено, что такое бинарное дерево или односвязный список, также была описана структура на С.
Этого и знания С в рамках любого учебника вполне достаточно, чтобы этот код написать, времени тоже давалось достаточно.
Вкратце:
императивное программирование — это когда вы описываете какие нужно выполнить действия и в каком порядке.
декларативное программирование — вы описываете что вы хотите получить задавая правила/формулы преобразования входных данных в выходные. Компилятор сам решает какие действия нужно выполнять и в каком порядке.
Почитайте все таки про Haskell — полезно для развития кругозора.
С точки зрения логики тут все нормально, выполняются оба условия -> выводим FizzBuzz, а то что все условия надо проверять не более одного раза — это подразумевается в нестрогой семантике Haskell'я. И компилятор все сделает как надо.
Это лишь декларативное описание соответствия входных данных желаемым выходным не отражающее то, как оно будет вычисляться в реальности.
Да, конечно, есть такие алгоритмы, которые тяжело написать, если не знать.
Но конкретно в этих случаях можно придумать ответ самому довольно быстро, даже если не знать наперед. Вся необходимая информация давалась.
В Хаскелле, чтобы оно само так получилось, надо несколько по-другому написать.
Можно конечно, но никто не может сказать, что этот вариант неправильный.
Он как раз видится мне тру-функциональным :)
Хотя эти задачки решаются в несколько строчек мы потом еще упростили и уже просили например перевернуть строку или просто скопировать строку без использования библиотечных функций — но картина стала не особо лучше.
fizzbuzz x | divides x 3 && divides x 5 = "FizzBuzz"
| divides x 3 = "Fizz"
| divides x 5 = "Buzz"
| otherwise = show x
where
divides x n = x `mod` n == 0
main = mapM (putStrLn . fizzbuzz) [1..100]
По моему личному опыту не более 20% выпускников, пришедших на собеседование, могут написать например поиск в бинарном дереве или перевернуть односвязный список на бумажке.
+1 я сам учавствовал в разработке одного телефона для Verizon'а года 3 назад и там не было никаких R-UIM'ов. Как и в других наших CDMA телефонах для других CDMA-операторов.
Я не говорю, что не будет работать, но Magic Mouse точно работает как простая, работает со всеми фичами в Mac OS X и можно врубить скролл в винде тоже немного покопавшись.
Это уже лучше, чем описываемая, если она будет работать со всеми фичами только в винде и как обычная во всех остальных. Так что пока 1:0 в пользу Apple имхо.
Как простая Bluetooth мышь без скролла и наворотов она всегда работает имхо. И без каких либо драйверов и танцев с бубном. Это уже большой плюс, по сравнению с описываемой Windows-only поделкой.
По моему личному опыту с ним проблем гораздо меньше даже чем с portage'ем. Тоже раньше пользовался Gentoo несколько лет, перешел на мак и ни разу не пожалел, все удобно и привычно и работает из коробки.
Этого и знания С в рамках любого учебника вполне достаточно, чтобы этот код написать, времени тоже давалось достаточно.
императивное программирование — это когда вы описываете какие нужно выполнить действия и в каком порядке.
декларативное программирование — вы описываете что вы хотите получить задавая правила/формулы преобразования входных данных в выходные. Компилятор сам решает какие действия нужно выполнять и в каком порядке.
Почитайте все таки про Haskell — полезно для развития кругозора.
Это лишь декларативное описание соответствия входных данных желаемым выходным не отражающее то, как оно будет вычисляться в реальности.
Но конкретно в этих случаях можно придумать ответ самому довольно быстро, даже если не знать наперед. Вся необходимая информация давалась.
Можно конечно, но никто не может сказать, что этот вариант неправильный.
Он как раз видится мне тру-функциональным :)
Это уже лучше, чем описываемая, если она будет работать со всеми фичами только в винде и как обычная во всех остальных. Так что пока 1:0 в пользу Apple имхо.