Scheme 또는 Haskell과 같은 함수형 프로그래밍 언어에 의사 코드를 쓰는 방법은 무엇입니까? 내가 검색 한 모든 것은 C 스타일 또는 파이썬 스타일 의사 코드를 보여주었습니다. 나는 기능적인 스타일로 의사 코드의 알고리즘을 쓰고 있어요 경우함수형 프로그래밍 언어에 의사 코드를 쓰는 방법은 무엇입니까?
1
A
답변
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
이 정의되어 있지 않고 Scheme에서 오류가 발생하지만 CL에서 실제로이 코드를 사용할 수 있으며 일부 디버거를 정의 할 것인지 묻는 곳에서 디버거로 건너 뜁니다. 모든 작업이 끝날 때까지 실행을 계속하면서 누락 된 부분을 구현하십시오.
하스켈이나 다른 프로그래밍 언어에서 기능적으로 사용되는 것뿐만 아니라, 이런 종류의 낙관적 인 프로그래밍을 할 수 있습니다. 물론 당신이 구현하는 언어로 할 수 있습니다. 최종 결과에 약간의 변화가있을 수 있지만 다른 리펙토링에서보다 큰 변화는 없습니다.
나는 이것이 의사 코드를 작성하고자하는 기능적 언어에 크게 의존한다고 생각한다. Haskell, ocaml 및 fsharp는 erlang, clojure/lisp와는 완전히 다른 접근 방식을 사용합니다. 따라서 의사 코드는 다르게 보일 것입니다. haskell 들어, 난 주로 형식 서명을 작성하고 산문에 알고리즘을 설명합니다. 동적 인 언어를 위해 나는 당신에게 어떤 힌트도 줄 경험이 충분하지 않다. – epsilonhalbe
왜 그것을 쓰고 싶니? 누군가가 "의사 코드를 보여 줘"라고 말하고 있습니까, 아니면 기능적 스타일로 코드를 디자인하는 방법을 이해하려고합니까? 후자의 경우 의사 코드가 잘못된 방법 일 수 있습니다. 귀하의 질문에 대한 배경 지식이 유용 할 것입니다. –
종종 (항상 그런 것은 아니지만) 기능 코드는 매우 작고 높은 수준이므로 작은 공간에서 전체 알고리즘을 적용하여 의사 코드를 불필요하게 만듭니다. IMO, 의사 코드 (pseudo code)는 너무 장황한 구문 (이해를 해치는)이나 지루한 부분 (스텁이 여기에서 잘 작동 함)을 건너 뛰고 자 할 때 더욱 유용합니다. – chi