Одна вещь, которую вы можете попробовать, это смотреть. (Thomas M. DuBuisson предложил другой, который также будет работать, если вы правильно обработаете окончательный один или два элемента.) Поскольку кажется, что это проблема, которую вы хотите решить самостоятельно, как упражнение для обучения, я напишу скелет, который вы можете взять в качестве отправной точки, если хотите:
largest :: [Integer] -> [Integer]
largest [] = _
largest [x] = _ -- What should this return?
largest [x1,x2] | x1 > x2 = _
| x1 < x2 = _
| otherwise = _
largest [x1,x2,x3] | x2 > x1 && x2 > x3 = _
| x3 > x2 = _
| otherwise = _
largest (x1:x2:x3:xs) | x2 > x1 && x2 > x3 = _
| otherwise = _
В дополнение к (x1:x2:x3:[])
нам нужен специальный случай [x1,x2,x3]
, поскольку, согласно пояснению вашего комментария, largest [3,3,2]
должен вернуться []
. но largest [3,2]
должен вернуться [3]
. Поэтому последние три элемента требуют специальной обработки и не могут просто перезаписываться на последних двух.
Если вы также хотите, чтобы результат включал заголовок списка, если он больше второго элемента, вы должны сделайте это вспомогательной функцией, а ваш largest
будет похож на largest (x1:x2:xs) = (if x1>x2 then [x1] else []) ++ largest' (x1:x2:xs)
. То есть вам нужна специальная обработка для первых элементов исходного списка, которые вы не хотите применять ко всем подспискам, когда вы рекурсируете.
означает, что я должен повторно создавать контейнер приложения каждый раз, когда я что-то меняю, даже если это не опечатка
blockquote>не обязательно, вы можете использовать
-v
для командыdocker run
, чтобы ввел файлы вашего проекта в контейнер. Таким образом, вам не придется восстанавливать изображение докеров.Обратите внимание, что команда
ONBUILD
предназначена для случаев, когда Dockerfile наследуетFROM
родительский файл докеров. КомандыONBUILD
, найденные в родительском файле Dockerfile, будут выполняться, когда Docker создает образ дочернего файла Docker.
Это не кажется очень эффективным, например. при создании веб-приложений, где вы привыкли что-то менять, сохранять и удалять обновления в браузере.
blockquote>Если вы используете контейнер Docker для обслуживания веб-приложения во время итерации по этому код приложения, то я предлагаю вам создать специальное изображение Docker, которое содержит только все, чтобы запустить ваше приложение, но код приложения.
Затем поделитесь каталогом, который содержит код вашего приложения на вашей машине, с каталогом, из которого файлы приложения будут обслуживаться в контейнере докера.
Например, если я разрабатываю статический веб-сайт и мое рабочее пространство находятся в
/home/thomas/workspace/project1/
, тогда я бы начал контейнер с nginx с:docker run -d -p 80:80 -v /home/thomas/workspace/project1/:/usr/local/nginx/html:ro nginx
Таким образом, я могу изменять файлы в
/home/thomas/workspace/project1/
, и изменения отражаются в прямом эфире без чтобы восстановить изображение докера или даже перезапустить контейнер докера.