Каковы некоторые хорошие промежуточные проблемы и проекты для изучения Haskell? [закрытый]

я должен действительно изучить Objective C для разработки основательных Приложений Mac?

В настоящее время, да.

, Поскольку пользователи Mac склонны использовать только приложения, которые имеют хороший (собственный) GUI, я не думаю, что Моно и GTK + или любой GUI Java (Swing) будет соответствовать их потребностям.

Корректный.

Там похожи на проекты Cocoa#, PyObjC и RubyCocoa, но действительно ли они готовы к прайм-тайму?

Cocoa#: Я не знаю, поскольку я не использую C#.

PyObjC: Вид, но Какао в Python является определенным взломом, так как Python не является Smalltalky достаточно.

RubyCocoa: Возможно. Я ожидаю MacRuby для назревания, все же. См. также:

12
задан duplode 14 August 2015 в 01:30
поделиться

5 ответов

Я нашел Project Euler полезным в изучении элементарных языковых конструкций, чтобы помочь мне почувствовать Haskell. Конечно, это не создание реального приложения с Haskell, но для меня это отличный способ освоить возможности языка. После этого я могу попытаться переписать некоторые мои небольшие приложения Python на Haskell (некоторые из них ориентированы на графический интерфейс). Так что, возможно, это будет вашим следующим шагом: возьмите что-то, что вы написали на другом языке, и попробуйте сделать это на Haskell.

13
ответ дан 2 December 2019 в 06:26
поделиться

Я бы порекомендовал взглянуть на ответ с наивысшей оценкой в ​​следующем вопросе о переполнении стека. Я считаю, что предлагаемый курс обучения и активности является наиболее полным. На среднем уровне автор предлагает конкретные монады и библиотеки, с которыми можно поработать. Я, по крайней мере, нашел, что это очень помогло.

При этом я не имею представления о вашем относительном уровне знаний других языков или концепций. Когда я начал искать промежуточный «вызов», я не ставил очень высокой цели. Я был новичком во всех смыслах. Я бы сказал, что любое использование вами для управления списками станет отличным проектом.

1
ответ дан 2 December 2019 в 06:26
поделиться

Я тоже (медленно) изучаю Haskell, и я использую учебник Напиши схему за 48 часов . Возможно, это поможет вам следовать ему и, если хотите, вы всегда сможете его расширить.

2
ответ дан 2 December 2019 в 06:26
поделиться

Вот проблема, вдохновленная Почему функциональное программирование имеет значение Джона Хьюза: найти наиболее эффективный способ заархивировать оцифрованные альбомы на DVD:

Проблема заключается в следующем:

  • Я хочу заархивировать свою музыкальную коллекцию на DVD. Альбом занимает 300–600 МБ, а DVD - 4 700 000 МБ. Я хочу упаковать как можно больше альбомов на DVD.

    Если в двух разных упаковках используется одинаковое количество DVD, я предпочитаю тот, который оставляет больше всего свободного места на наименее заполненном DVD, так, чтобы все остальные DVD были как можно полнее.

  • Проблема NP-сложная, но основной шаг - использовать стандартную жадную херистику:
    1. Сортировка альбомов в список, сначала самый большой.
    2. Начните с бесконечного списка пустых DVD.
    3.   повтор
       взять первый альбом из списка
       поместите альбом в первый DVD, на котором есть место для него
       пока в списке больше нет альбомов
      
      Запишите все непустые DVD.

Решите следующие проблемы программирования:

  1. Реализуйте стандартный жадный алгоритм, написав функцию
     pack :: [(Альбом, Целое число)] -> [DVD]
    
    где
     тип Album = String
     тип DVD = [Альбом]
    
    Разложите свое решение на отдельные функции, как описано Хьюзом.
  2. Результат упаковки является чистой функцией порядка, в котором альбомы появятся в списке. Вы можете улучшите упаковку, используя поиск пузырьков : возьмите отсортированный список, создав новый список, используя этот алгоритм:
     повторение
     вероятностно выбрать элемент из старого списка
     удалите этот элемент из старого списка и поместите его в конец
     новый список
     пока старый список не станет пустым
    
    Затем вы выполняете алгоритм жадной упаковки возмущенного списка. Если упаковка улучшается, новый заказ становится основой для дальнейшие возмущения.

    Вероятностный выбор параметризуется вероятностью p :

    • Выбрать первый элемент с вероятностью p
    • Выбрать второй элемент с вероятностью p × (1-p)
    • Выбрать i -й элемент с вероятностью p × (1-p) ^ i-1
    • Выбрать последний элемент (в списке длиной n ) с вероятностью (1-p) ^ n-1

    Проблема состоит в том, чтобы реализовать упаковку с помощью Bubble Search

    Ваша функция может принимать в качестве аргумента бесконечный список случайных числа.

При p = 0,45 и 10 000 итераций поиск пузырьков может последовательно производить упаковки DVD, заполненные более чем на 99,5%.

Подсказки:

  • Повторно используйте как можно больше комбинаторов Хьюза.
  • Вам нужно будет пролистать бесконечный список случайных чисел. Напишите новые функции высшего порядка, которые помогут вам в этом.
6
ответ дан 2 December 2019 в 06:26
поделиться

Попробовать {{курс student_set.all.0}} . Механизм шаблонов не допускает произвольного кода, а синтаксис доступа к методу отличается от обычного кода Python. Я рекомендую прочитать этот обзор , чтобы понять, как работают шаблоны

-121--3894363-

По адресу:

  1. Вы назначаете значение указателю q , удалив его из адреса в конкретную память см. Документ по отмене привязки указателя . Однако из-за состояния , при котором устанавливается адрес x , он может указывать на ячейку произвольного запоминающего устройства (не инициализирована), если x < = 0 .
  2. В строке выше задается q для указания на тот же адрес памяти, что и p . Затем для p выделяется новая память. Затем выделяется новая память, на которую указывает p .
  3. Строка над вами удалила выделение памяти, указанное q . Теперь этот адрес памяти доступен для использования системой. И после этого вы присваиваете памяти значение, которое не "принадлежит" вам.
  4. Если x = 0 , то возвращается к системной памяти, на которую указывают q и p . И снова попытка использовать память, которая не "принадлежит" вам. Также отсутствует delete p , если x! = 0 - таким образом память не возвращается в систему.
-121--4667618-

rubyquiz.com имеет много хороших упражнений, которые довольно хорошо отображаются на haskell. Haskell wiki имеет реализации haskell некоторых, но не всех из них.

1
ответ дан 2 December 2019 в 06:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: