문제

나는 기능적 스타일의 프로그래밍을 통해 가장 잘 해결되는 것으로 생각되는 문제가 있습니다.

매우 명확한 배경에서 나오는 나는 클래스 다이어그램/설명, 통신 다이어그램, 상태 다이어그램 등과 관련된 프로그램 설계에 익숙합니다. 그러나 이러한 다이어그램은 모두 시스템 상태 및 다양한 부작용을 의미합니다. 행동은 시스템에 있습니다.

기능 프로그램의 설계에 사용되는 표준화 된 다이어그램 또는 수학적 기호 세트가 있거나 짧은 기능적 pseudo 코드로 가장 잘 설계된 프로그램이 있습니까 (함수가 명령 적 대응 자보다 훨씬 짧다는 점에서).

고마워요, 마이크

도움이 되었습니까?

해결책

기능 프로그래밍에 대한 비밀 속임수가 있습니다.

  1. 그것은 대부분 무국적이므로 전통적인 명령형 다이어그램은 중요하지 않습니다.

  2. 평범한 정원-다양성 수학 표기법의 대부분도 무국적입니다.

기능 디자인은 다른 것보다 대수와 비슷합니다. 함수를 정의하고 해당 함수의 구성이 원하는 결과를 생성한다는 것을 보여줄 것입니다.

기능 프로그래밍이 절차 프로그래밍보다 다소 간단하기 때문에 다이어그램이 필요하지 않습니다. 그것은 기존의 수학적 표기법과 비슷합니다. 수학 기술을 사용하여 다양한 기능이 올바른 일을한다는 것을 보여줍니다.

다른 팁

기능적 프로그래머는 더 많은 방정식을 작성한 다음 다이어그램을 작성합니다. 게임이 호출됩니다 정식 추론 그리고 그것은 주로 포함됩니다

  • 대체는 동등한 것과 같습니다

  • 대수법 적용

  • 유도에 의한 가끔 증거

아이디어는 "명백히 정확한"정말 간단한 코드를 작성한 다음, 정식 추론을 사용하여 더 깨끗하고 더 잘 수행 할 수있는 것으로 바꿉니다. 이 예술의 마스터는 Richard Bird라는 옥스포드 교수입니다.

예를 들어, 체계 표현식을 단순화하려면

(append (list x) l)

나는 미친 듯이 평등 한 것에 대해 동등하게 기숙사 할 것입니다. 정의를 사용합니다 list 나는 얻다

(append (cons x '()) l)

내가 가지고있는 부록의 본문을 부여합니다

(if (null? (cons x '())) 
    l
    (cons (car (cons x '())) (append (cdr (cons x '())) l)))

이제 이러한 대수 법칙이 있습니다.

(null? (cons a b)) == #f
(car   (cons a b)) == a
(cdr   (cons a b)) == b

그리고 대체는 내가 얻는 동등한 것과 같습니다

(if #f
    l
    (cons x (append '() l))

다른 법률과 함께 (if #f e1 e2) == e2, 나는 얻다

(cons x (append '() l))

그리고 다시 부록의 정의를 소비하면 나는 얻는다.

(cons x l)

내가 증명 한 것은 동일합니다

(append (list x) l)

기능 프로그래밍에 대해 많이 모르지만 여기에 제가 겪은 두 가지가 있습니다.

  • λ (lambda)는 종종 함수를 나타내는 데 사용됩니다.
  • f ο g는 기능 구성을 나타내는 데 사용됩니다
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top