Языки функционального программирования составления блок-схем

Составление блок-схем. Эта древняя старая практика это использовалось больше 1 000 лет теперь, будучи вынужденным на нас бедные студенты, без любой полноценности (или так, я думаю). Это могло бы работать хорошо с императивом, последовательно рабочими языками, но что относительно моего любимого функционального программирования?

К сожалению, я вынужден создать блок-схему для своей программы (который записан в Haskell).

Я воображаю это являющийся легким для чего-то вроде этого:

main :: IO ()
main = do
   someInput <- getLine
   let upped = map toUpper someInput
   putStrLn upped

Который является всего 3 упорядоченными шагами, выбирающими данными, uppercasing это, производя его.

Вещи выглядят хуже на этот раз:

main :: IO ()
main = do
   someInput <- fmap toUpper getLine
   putStrLn someInput

Или как это:

main :: IO ()
main = interact (map toUpper)

Хорошо, это было IO, можно обработать это как императивный язык. Что относительно чистых функций?

Фактический пример:

onlyMatching :: String -> [FilePath] -> [FilePath]
onlyMatching ext = filter f
   where f name = lower ('.' : ext) == (lower . takeExtension $ name)
         lower  = map toLower

Как был бы Вы блок-схема, которые длятся тот?

11
задан LukeN 3 May 2010 в 14:21
поделиться

3 ответа

Я не думаю, что блок-схема, которая представляет процессы (следовательно, смену состояний), подходит для FP, которая в основном не имеет состояния.

Но я думаю, что вы можете показать схему (?).

        ext
       _ | ______________________________________________
      |  |                                               |
      |  `-> [ '.' : ] -------> [ lower ] --.__          |
      |                                      __ [ == ] ----->
name --> [ takeExtension ] ---> [ lower ] --'            |
      |__________________________________________________|
                              f

Вам лучше проконсультироваться с преподавателем.

12
ответ дан 3 December 2019 в 06:20
поделиться

На самом деле, блок-схемы для использования в программном обеспечении появились всего около 60 лет назад. (И действительно, программированию в том виде, в каком мы его знаем, насчитывается всего 65 лет!) В то время они были невероятно важны как инструмент для планирования и разработки алгоритмов до очень утомительного и подверженного ошибкам этапа «кодирования».

В наши дни наши языки программирования достигли такого уровня выразительности, когда цель алгоритма более четко выражается в самом коде. (Возможно, не так много в VisualBasic, но определенно в Haskell.) Следовательно, ни один современный магазин программирования не использует блок-схемы.

Однако языки визуального программирования существуют и имеют большой успех в некоторых областях. Эти среды связаны с блок-схемами. Возможно, ваш инструктор действительно готовится выполнить некоторый объем работы по сравнительному языку программирования и побуждает всех вас задуматься об этих подходах.

Наконец, что касается вашей конкретной проблемы, подумайте об этом следующим образом: традиционные блок-схемы в первую очередь демонстрируют поток управления через программу, поскольку именно такой код люди писали в то время. Однако всегда был проиллюстрирован некоторый поток данных. Для функциональной программы вы в первую очередь демонстрируете поток данных.

Хитрость заключается в том, чтобы выяснить, как проиллюстрировать поток (частично применяемых) функций в виде данных. Подумайте, что должна делать блок-схема для поддержки концепции подпрограммы, которая может быть вызвана в двух местах ... Теперь, возможно, вы можете создать аналогичную графическую конструкцию, чтобы обозначить, что функция, обозначенная Ⓐ, входит в качестве второго аргумента filter «Я представляю небольшой лук с надписью fmap с вырезанной сбоку замочной скважиной для соединения Ⓐ со стрелкой.

По крайней мере, воспринимайте это как задание по изучению альтернативных представлений вашей программы - и если у вас есть расширенная блок-схема (которая никогда не имела дело с универсальными функциями), и проясните это, ваш инструктор должен дать вам дополнительные Метки!

4
ответ дан 3 December 2019 в 06:20
поделиться

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

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

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