如何为函数式编程语言编写伪代码?

时间:2016-09-02 14:48:48

标签: haskell functional-programming scheme pseudocode

如何为Scheme或Haskell等函数式编程语言编写伪代码? 我搜索的所有内容都显示了C风格或Python风格的伪代码。

2 个答案:

答案 0 :(得分: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-nodeinsert-sorted未定义,并且在Scheme中您会收到错误但在CL中您实际上可能会使用此错误,它会跳转到调试器中你会被问到是否要定义其中的一些,这样你就可以随时实现缺失的部分并继续执行直到一切都完成。

我想在Haskell或任何其他编程语言中,不仅仅是功能性编程语言,你可以用你正在实现的语言来做这种乐观的编程。最终结果可能会有微小的变化,但它并不比其他重构中的变化大。

答案 1 :(得分:1)

如果我在函数式的伪代码中编写算法,那么我可能会混合和匹配语言,但会一直使用:

  • let-bound variables
  • 功能应用
  • 地图和折叠

以哈希函数为例:

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