2016-09-02 5 views
1

Как написать псевдокод для языков программирования, таких как Scheme или Haskell? Все, что я искал, показал псевдокод стиля C или Python.Как написать псевдокод для языков функционального программирования?

+5

Я думаю, что это сильно зависит от того, на каком функциональном языке вы хотите писать псевдокод. Haskell, ocaml и fsharp имеют совершенно иной подход, чем erlang, clojure/lisp. Таким образом, псевдокод будет выглядеть по-другому. Для haskell я бы написал в основном сигнатуры типов и объяснил алгоритм под прозой. Для динамических языков у меня недостаточно опыта, чтобы дать вам какие-либо подсказки. – epsilonhalbe

+4

Зачем вы хотите это написать? Кто-то говорит «покажите мне псевдокод», или вы пытаетесь понять, как разработать код в функциональном стиле? Если последний, то псевдокод, вероятно, является неправильным способом. Немного больше фона для вашего вопроса было бы полезно. –

+2

Часто (хотя и не всегда) функциональный код очень компактный и высокоуровневый, поэтому в небольшом пространстве вы можете вместить весь алгоритм, делая ненужным псевдокод. IMO, псевдокод более полезен, когда у вас слишком многословный синтаксис (который вредит пониманию) или когда вы хотите пропустить некоторые скучные части (здесь будут работать штрафы). – chi

ответ

1

Если я пишу алгоритм в псевдокоде в функциональном стиле, то я мог бы смешивать и сочетать языки, но буду последовательно использовать:

  • позволяет переплету переменных
  • функции приложения
  • карты и складки

Возьмем, например, хэш-функция:

hash data = 
    let blocks = chunksOf blockSize (preprocess data) 
    foldr updateContext initialContext blocks 
4

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

(define (huffman nodes) 
    (if (single-node? nodes) 
     (first nodes) 
     (let ([new-node 
      (make-node (first nodes) 
         (second nodes))]) 
     (huffman (insert-sorted new-node   
           (cddr nodes)))))) 

Это полный алгоритм и он даже станет частью полученного фактического кода, так это тоже не псевдо-код. single-node?, make-node, insert-sorted не определен, и в Схеме вы получите сообщение об ошибке, но в CL вы могли бы использовать это, и он перепрыгнул бы в отладчик, где вас спросили, хотите ли вы определить некоторые из них, чтобы вы в основном затем выполняйте недостающие части по мере продвижения и продолжайте выполнение, пока все не будет завершено.

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

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