TypeScript의 함수형 프로그래밍

Patricia Arquette
풀어 주다: 2024-10-19 22:32:29
원래의
574명이 탐색했습니다.

Functional Programming in TypeScript

내용물

  1. 소개
  2. TypeScript 환경
  3. 함수를 통한 데이터 표현
    1. 세트
    2. 바이너리 연산
    3. 더 나아가
  4. 유클리드 평면
    1. 디스크 그리기
    2. 수평 및 수직 반평면 그리기
    3. 기능
    4. 더 나아가
  5. 프랙탈
    1. 복소수와 그림
    2. 만델브로트 프랙탈
    3. 더 나아가

여기에서 소스 코드를 찾을 수 있습니다: https://github.com/aelassas/function-ts

소개

TypeScript에서 함수는 객체일 뿐입니다. 따라서 함수를 생성하거나, 매개변수로 전달하거나, 함수에서 반환하거나, 변수에 할당할 수 있습니다. 따라서 TypeScript에는 일류 기능이 있습니다. 보다 정확하게는 TypeScript는 다음을 지원합니다.

  • 고차 함수 인수
  • 고차 함수 결과
  • 중첩 함수
  • 익명 기능
  • 폐쇄
  • 부분 적용(ECMAScript 5)

함수형 프로그래밍의 기본 사항은 인터넷에서 찾을 수 있으므로 이 기사에서는 다루지 않습니다. 대신 대수학, 숫자, 유클리드 평면 및 도형에 적용되는 TypeScript의 함수형 프로그래밍에 대해 설명합니다. 이 기사에 제공된 예는 단순한 것부터 복잡한 것까지 시작되지만 항상 단순하고 직설적이며 이해하기 쉬운 방식으로 설명됩니다.

타입스크립트 환경

소스 코드를 실행하려면 Node.js를 설치해야 합니다. Node.js가 설치되면 소스 코드 아카이브를 다운로드하고 압축을 푼 다음 터미널에서 압축을 푼 소스 코드 폴더로 이동하고 TypeScript 환경을 설정하고 다음 명령을 사용하여 필요한 모든 종속성을 설치합니다.

npm install
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

숫자 데모를 실행하려면 다음 명령을 실행하세요.

npm run numbers
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

Euclidean plane의 데모를 실행하려면 다음 명령을 실행하세요.

npm run plane
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

Fractals의 데모를 실행하려면 다음 명령을 실행하세요.

npm run fractals
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

함수를 통해 데이터 표현

S를 요소 a, b, c...(예: 테이블 위의 책 또는 유클리드 평면의 점)의 집합이라고 하고 S'를 이러한 요소의 하위 집합(예: 테이블 위의 녹색 책 또는 유클리드 평면의 원점을 중심으로 하는 반경 1의 원 안의 점).

집합 S'의 특성 함수 S'(x)는 S의 각 요소 x에 참 또는 거짓을 연관시키는 함수입니다.

S'(x) = true if x is in S'
S'(x) = false if x is not in S'
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

S를 탁자 위의 책 세트라고 하고 S'를 탁자 위의 녹색 책 세트라고 하겠습니다. a와 b는 두 개의 녹색 책이고, c와 d는 테이블 위에 있는 두 개의 빨간색 책이라고 가정합니다. 그런 다음:

npm install
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

S를 유클리드 평면에 있는 점의 집합이라고 하고 S'를 유클리드 평면의 원점(0, 0)(단위원)을 중심으로 하는 반지름 1의 원에 있는 점의 집합이라고 합니다. a와 b를 단위원의 두 점으로 하고, c와 d를 유클리드 평면의 원점을 중심으로 하는 반지름 2의 원의 두 점으로 놓습니다. 그런 다음:

npm run numbers
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

따라서 모든 집합 S'는 항상 특성 함수로 표현될 수 있습니다. 요소를 인수로 취하고 이 요소가 S'에 있으면 true를 반환하고 그렇지 않으면 false를 반환하는 함수입니다. 즉, TypeScript에서는 집합(추상 데이터 유형)을 함수로 표현할 수 있습니다.

npm run plane
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

다음 섹션에서는 TypeScript를 통해 집합 대수학의 일부 기본 집합을 함수형 방식으로 표현하는 방법을 살펴본 다음 집합에 대한 일반 이진 연산을 정의합니다. 그런 다음 이러한 작업을 숫자에 적용한 다음 유클리드 평면의 하위 집합에 적용합니다. 집합은 추상 데이터 구조이고, 숫자의 하위 집합과 유클리드 평면의 하위 집합은 추상 데이터 구조의 표현이며, 마지막으로 이진 연산은 추상 데이터 구조의 모든 표현에서 작동하는 일반 논리입니다.

세트

이 섹션에서는 TypeScript를 통해 집합의 대수학에서 몇 가지 기본 집합의 표현을 소개합니다.

빈 세트

Functional Programming in TypeScript

E를 빈 집합으로 두고 특성 함수를 비우세요. 집합 대수학에서 E는 요소가 없는 고유한 집합입니다. 따라서 공백은 다음과 같이 정의할 수 있습니다.

npm run fractals
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

따라서 TypeScript의 E 표현은 다음과 같이 정의할 수 있습니다.

S'(x) = true if x is in S'
S'(x) = false if x is not in S'
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

집합 대수학에서 공백은 다음과 같이 표현됩니다.

Functional Programming in TypeScript

따라서 아래 코드를 실행합니다.

S'(a) = S'(b) = true
S'(c) = S'(d) = false
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

다음과 같은 결과를 제공합니다.

Functional Programming in TypeScript

모두 설정

Functional Programming in TypeScript

S를 집합으로 하고 S'를 모든 요소와 특성 함수를 모두 포함하는 S의 부분 집합이라고 가정합니다. 집합 대수학에서 S'는 모든 요소를 ​​포함하는 전체 집합입니다. 따라서 All은 다음과 같이 정의할 수 있습니다.

S'(a) = S'(b) = true
S'(c) = S'(d) = false
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

따라서 TypeScript의 S' 표현은 다음과 같이 정의할 수 있습니다.

type Set<T> = (x: T) => boolean
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

집합 대수학에서 All은 다음과 같이 표현됩니다.

Functional Programming in TypeScript

따라서 아래 코드를 실행합니다.

npm install
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

다음과 같은 결과를 제공합니다.

Functional Programming in TypeScript

싱글톤 세트

E를 싱글톤 집합으로 하고 싱글톤을 특성 함수라고 합니다. 집합의 대수학에서 E는 단위 집합이라고도 알려져 있으며, 1-튜플은 정확히 하나의 요소 e를 갖는 집합입니다. 따라서 싱글톤은 다음과 같이 정의할 수 있습니다.

npm run numbers
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

따라서 TypeScript의 E 표현은 다음과 같이 정의할 수 있습니다.

npm run plane
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

따라서 아래 코드를 실행합니다.

npm run fractals
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

다음과 같은 결과를 제공합니다.

Functional Programming in TypeScript

기타 세트

이 섹션에서는 정수 집합의 하위 집합을 보여줍니다.

짝수

E를 짝수의 집합으로 하고 짝수를 특징함수라 하자. 수학에서 짝수는 2의 배수인 수를 말합니다. 따라서 Even은 다음과 같이 정의할 수 있습니다.

S'(x) = true if x is in S'
S'(x) = false if x is not in S'
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

따라서 TypeScript의 E 표현은 다음과 같이 정의할 수 있습니다.

S'(a) = S'(b) = true
S'(c) = S'(d) = false
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

따라서 아래 코드를 실행합니다.

S'(a) = S'(b) = true
S'(c) = S'(d) = false
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

다음과 같은 결과를 제공합니다.

Functional Programming in TypeScript

홀수

E를 홀수의 집합으로 하고 Odd를 특성함수로 둡니다. 수학에서 홀수는 2의 배수가 아닌 수를 말합니다. 따라서 Odd는 다음과 같이 정의할 수 있습니다.

type Set<T> = (x: T) => boolean
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

따라서 TypeScript의 E 표현은 다음과 같이 정의할 수 있습니다.

Empty(x) = false if x is in E
Empty(x) = false if x is not in E
로그인 후 복사
로그인 후 복사
로그인 후 복사

따라서 아래 코드를 실행합니다.

const empty = () => (e: T) => false
로그인 후 복사
로그인 후 복사
로그인 후 복사

다음과 같은 결과를 제공합니다.

Functional Programming in TypeScript

3의 배수

E를 3의 배수 집합으로 하고 MultipleOfThree를 특성 함수로 가정합니다. 수학에서 3의 배수는 3으로 나누어지는 수입니다. 따라서 MultipleOfThree는 다음과 같이 정의할 수 있습니다.

console.log('\nEmpty set:')
console.log('Is 7 in {}?', common.empty()(7))
로그인 후 복사
로그인 후 복사
로그인 후 복사

따라서 TypeScript의 E 표현은 다음과 같이 정의할 수 있습니다.

All(x) = true if x is in S
로그인 후 복사
로그인 후 복사

따라서 아래 코드를 실행합니다.

const all = () => (e: T) => true
로그인 후 복사

다음과 같은 결과를 제공합니다.

Functional Programming in TypeScript

5의 배수

E를 5의 배수 집합으로 하고 MultipleOfFive를 특성 함수로 가정합니다. 수학에서 5의 배수는 5로 나누어지는 숫자입니다. 따라서 MultipleOfFive는 다음과 같이 정의할 수 있습니다.

npm install
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

따라서 TypeScript의 E 표현은 다음과 같이 정의할 수 있습니다.

npm run numbers
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

따라서 아래 코드를 실행합니다.

npm run plane
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

다음과 같은 결과를 제공합니다.

Functional Programming in TypeScript

소수

오래 전 프로젝트 오일러 문제를 풀 때 다음 문제를 해결해야 했습니다.

npm run fractals
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

이 문제를 해결하기 위해 먼저 주어진 숫자가 소수인지 아닌지 확인하는 빠른 알고리즘을 작성해야 했습니다. 알고리즘을 작성한 후에는 10,001번째 소수를 찾을 때까지 소수를 반복하는 반복 알고리즘을 작성했습니다.

E를 소수의 집합으로 하고 소수의 특성함수를 소수라고 합니다. 수학에서 소수는 1과 자기 자신 외에 양의 약수가 없는 1보다 큰 자연수를 말합니다. 따라서 Prime은 다음과 같이 정의할 수 있습니다.

S'(x) = true if x is in S'
S'(x) = false if x is not in S'
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

따라서 TypeScript의 E 표현은 다음과 같이 정의할 수 있습니다.

S'(a) = S'(b) = true
S'(c) = S'(d) = false
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

따라서 아래 코드를 실행하여 문제를 해결하세요.

S'(a) = S'(b) = true
S'(c) = S'(d) = false
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

아래에서 getPrime이 정의됩니다.

type Set<T> = (x: T) => boolean
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

다음과 같은 결과를 제공합니다.

Functional Programming in TypeScript

바이너리 연산

이 섹션에서는 주어진 세트에서 새로운 세트를 구성하고 세트를 조작하기 위한 몇 가지 기본 작업을 소개합니다. 집합 대수학의 Ven 다이어그램 아래

Functional Programming in TypeScript

노동 조합

Functional Programming in TypeScript

E와 F를 2개의 집합으로 둡니다. E U F로 표시되는 E와 F의 합집은 E와 F에 속한 모든 원소의 집합입니다.

노조가 노조 운영되게 해주세요. 따라서 Union 연산은 TypeScript에서 다음과 같이 구현될 수 있습니다.

Empty(x) = false if x is in E
Empty(x) = false if x is not in E
로그인 후 복사
로그인 후 복사
로그인 후 복사

아래 코드 실행:

const empty = () => (e: T) => false
로그인 후 복사
로그인 후 복사
로그인 후 복사

다음과 같은 결과를 제공합니다.

Functional Programming in TypeScript

교차로

Functional Programming in TypeScript

E와 F를 2개의 집합으로 둡니다. E n F로 표시되는 E와 F의 교차점은 E와 F를 모두 구성하는 모든 요소의 집합입니다.

Intersection을 intersection 작업으로 설정합니다. 따라서 Intersection 연산은 TypeScript에서 다음과 같이 구현될 수 있습니다.

console.log('\nEmpty set:')
console.log('Is 7 in {}?', common.empty()(7))
로그인 후 복사
로그인 후 복사
로그인 후 복사

아래 코드 실행:

All(x) = true if x is in S
로그인 후 복사
로그인 후 복사

다음과 같은 결과를 제공합니다.

Functional Programming in TypeScript

데카르트 곱

Functional Programming in TypeScript

E와 F를 2개의 집합으로 둡니다. E × F로 표시되는 E와 F의 데카르트 곱은 e가 E의 멤버이고 f가 F의 멤버인 모든 순서쌍(e, f)의 집합입니다.

CartesianProduct를 Cartesian Product 연산으로 설정합니다. 따라서 CartesianProduct 작업은 TypeScript에서 다음과 같이 구현될 수 있습니다.

npm install
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

아래 코드 실행:

npm run numbers
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

다음과 같은 결과를 제공합니다.

Functional Programming in TypeScript

보완

Functional Programming in TypeScript

E와 F를 2개의 집합으로 둡니다. E에서 F의 상대보색은 E F로 표시되며 E의 구성원이지만 F의 구성원이 아닌 모든 요소의 집합입니다.

Complement를 상대적인 보완 연산으로 둡니다. 따라서 Complement 연산은 TypeScript에서 다음과 같이 구현될 수 있습니다:

npm run plane
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
아래 코드를 실행합니다:
npm run fractals
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

다음과 같은 결과를 제공합니다.

Functional Programming in TypeScript

대칭적 차이

Functional Programming in TypeScript

E와 F를 2개의 집합으로 둡니다. E Δ F로 표시되는 E와 F의 대칭적 차이는 E와 F의 구성원이지만 E와 F의 교차점에 있지 않은 모든 요소의 집합입니다.

SymmetricDifference를 대칭 차이 연산으로 설정합니다. 따라서 SymmetricDifference 작업은 TypeScript에서 두 가지 방법으로 구현될 수 있습니다. 간단한 방법은 다음과 같이 합집합과 보수 연산을 사용하는 것입니다.

S'(x) = true if x is in S'
S'(x) = false if x is not in S'
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

또 다른 방법은 다음과 같이 XOR 바이너리 연산을 사용하는 것입니다.

S'(a) = S'(b) = true
S'(c) = S'(d) = false
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

아래 코드 실행:

S'(a) = S'(b) = true
S'(c) = S'(d) = false
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

다음과 같은 결과를 제공합니다.

Functional Programming in TypeScript

기타 작업

이 섹션에서는 세트에 대한 기타 유용한 이진 연산을 소개합니다.

포함

Contains를 요소가 집합에 있는지 여부를 확인하는 작업으로 설정합니다. 이 연산은 요소를 매개변수로 취하고 요소가 세트에 있으면 true를 반환하고 그렇지 않으면 false를 반환하는 함수입니다.

따라서 이 작업은 TypeScript에서 다음과 같이 정의됩니다.

type Set<T> = (x: T) => boolean
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

따라서 아래 코드를 실행하세요.

npm install
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

다음 결과를 제공합니다.

Functional Programming in TypeScript

추가하다

Add를 집합에 요소를 추가하는 작업으로 둡니다. 이 작업은 요소를 매개변수로 가져와 세트에 추가하는 함수입니다.

따라서 이 작업은 TypeScript에서 다음과 같이 정의됩니다.

npm run numbers
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

따라서 아래 코드를 실행하세요.

npm run plane
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

다음 결과를 제공합니다.

Functional Programming in TypeScript

제거하다

제거를 집합에서 요소를 제거하는 작업으로 둡니다. 이 작업은 요소를 매개변수로 가져와 세트에서 제거하는 함수입니다.

따라서 이 작업은 TypeScript에서 다음과 같이 정의됩니다.

npm run fractals
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

따라서 아래 코드를 실행하세요.

S'(x) = true if x is in S'
S'(x) = false if x is not in S'
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

다음 결과를 제공합니다.

Functional Programming in TypeScript

더 나아가고 싶은 사람들을 위해

함수형 프로그래밍을 통해 TypeScript에서 집합 대수학을 얼마나 쉽게 수행할 수 있는지 확인할 수 있습니다. 이전 섹션에서는 가장 기본적인 정의를 보여주었습니다. 하지만 더 나아가고 싶다면 다음을 생각해 보세요.

  • 집합보다 관계
  • 모노이드, 그룹, 필드, 링, K-벡터 공간 등과 같은 추상 대수
  • 포함-배제 원칙
  • 러셀의 역설
  • 칸토어의 역설
  • 이중 벡터 공간
  • 정리와 추론

유클리드 평면

이전 섹션에서는 세트에 대한 기본 개념을 TypeScript로 구현했습니다. 이번 섹션에서는 유클리드 평면에 구현된 개념을 연습해보겠습니다.

디스크 그리기

Functional Programming in TypeScript

디스크는 원으로 둘러싸인 평면의 부분 집합입니다. 디스크에는 두 가지 유형이 있습니다. 경계를 구성하는 원의 점을 포함하는 디스크인 닫힌 디스크와 경계를 구성하는 원의 점을 포함하지 않는 디스크인 열린 디스크

이번 섹션에서는 닫힌 디스크의 특성 기능을 설정하고 HTML5 페이지에 그려보겠습니다.

특성 함수를 설정하려면 먼저 평면의 두 점 사이의 유클리드 거리를 계산하는 함수가 필요합니다. 이 기능은 다음과 같이 구현됩니다.

S'(a) = S'(b) = true
S'(c) = S'(d) = false
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

포인트는 아래에 정의되어 있습니다.

S'(a) = S'(b) = true
S'(c) = S'(d) = false
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

이 공식은 피타고라스의 정리를 기반으로 합니다.

Functional Programming in TypeScript

여기서 c는 유클리드 거리이고, a²는 (p1.X - p2.X)²이고 b²는 (p1.Y - p2.Y)²입니다.

디스크를 폐쇄형 디스크의 특징 기능으로 두세요. 집합의 대수학에서 실수 집합의 닫힌 디스크에 대한 정의는 다음과 같습니다.

Functional Programming in TypeScript

여기서 a와 b는 중심 좌표이고 R은 반경입니다.

따라서 TypeScript의 Disk 구현은 다음과 같습니다.

npm install
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

세트를 HTML5 페이지에서 보기 위해 유클리드 평면에 세트를 그리는 함수 draw를 구현하기로 했습니다. 저는 HTML5를 선택하여 캔버스 요소를 사용하여 그림을 그렸습니다.

그래서 메소드 드로우를 통해 아래 그림의 유클리드 평면을 만들어봤습니다.

Functional Programming in TypeScript

아래는 비행기 구현입니다.

npm run numbers
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

그리기 기능에서는 유클리드 평면 컨테이너와 동일한 너비, 동일한 높이의 캔버스가 생성됩니다. 그런 다음 캔버스의 픽셀(x,y) 단위 각 점이 세트에 속하는 경우 검은색 점으로 대체됩니다. xMin, xMax, yMin, yMax는 위의 유클리드 평면 그림

에 표시된 경계값입니다.

아래 코드 실행:

npm run plane
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

여기서 disk는 캔버스의 ID입니다.

npm run fractals
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

다음 결과를 제공합니다.

Functional Programming in TypeScript

수평 및 수직 반평면 그리기

Functional Programming in TypeScript

수평 또는 수직 반면은 평면이 유클리드 공간을 나누는 두 부분 집합 중 하나입니다. 수평 반평면은 위 그림과 같이 Y축에 수직인 선을 통해 평면이 유클리드 공간을 나누는 두 부분 집합 중 하나입니다. 수직 반평면은 X축에 수직인 선을 통해 평면이 유클리드 공간을 나누는 두 하위 집합 중 하나입니다.

이 섹션에서는 수평수직 반평면의 특징 기능을 설정하고 이를 HTML5 페이지에 그려서 무엇인지 살펴보겠습니다. 디스크 하위 집합

과 결합하면 가능합니다.

HorizontalHalfPlane을 수평 반평면의 특성 함수로 설정합니다. TypeScript에서 HorizonHalfPlane의 구현은 다음과 같습니다.

S'(x) = true if x is in S'
S'(x) = false if x is not in S'
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

따라서 아래 코드를 실행합니다.

npm install
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

여기서 hhp는 캔버스의 ID입니다.

npm run numbers
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

다음 결과를 제공합니다.

Functional Programming in TypeScript

VerticalHalfPlane을 수직 반평면의 특성 함수로 설정합니다. TypeScript에서 VerticalHalfPlane의 구현은 다음과 같습니다.

npm run plane
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
따라서 아래 코드를 실행합니다.
npm run fractals
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

여기서 vhd는 캔버스의 ID입니다.

S'(x) = true if x is in S'
S'(x) = false if x is not in S'
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

다음 결과를 제공합니다.

Functional Programming in TypeScript

기사의 첫 번째 섹션에서는 세트에 대한 기본 이진 연산을 설정했습니다. 따라서 예를 들어 디스크와 반 평면의 교차점을 결합하여 반 디스크 하위 집합을 그릴 수 있습니다.

따라서 아래 샘플을 실행하세요.

S'(a) = S'(b) = true
S'(c) = S'(d) = false
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

여기서 hd는 캔버스의 ID입니다.

S'(a) = S'(b) = true
S'(c) = S'(d) = false
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

다음 결과를 제공합니다.

Functional Programming in TypeScript

기능

이 섹션에서는 유클리드 평면의 세트에 대한 기능을 설명합니다.

번역하다

Functional Programming in TypeScript

translatePoint를 평면의 한 점을 이동하는 함수로 둡니다. 유클리드 기하학에서 TranslatePoint는 주어진 점을 지정된 방향으로 일정한 거리만큼 이동시키는 함수입니다. 따라서 TypeScript의 구현은 다음과 같습니다.

type Set<T> = (x: T) => boolean
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

여기서 (deltax, delta)는 번역의 상수 벡터입니다.

평면에서 집합을 번역하는 기능을 번역이라고 하자. 이 함수는 TypeScript에서 다음과 같이 간단히 구현됩니다.

Empty(x) = false if x is in E
Empty(x) = false if x is not in E
로그인 후 복사
로그인 후 복사
로그인 후 복사
'translate'은 첫 번째 유클리드 차원의 델타 거리인 'deltax'와 두 번째 유클리드 차원의 델타 거리인 'deltay'를 매개변수로 사용합니다. 점 _P (x, y)_가 집합 _S_로 변환되면 해당 좌표는 _(x', y') = (x, delatx, y, deltay)_로 변경됩니다. 따라서 점 _(x' - delatx, y' - deltay)_는 항상 집합 _S_에 속합니다. 집합 대수학에서는 '번역'을 동형(isomorph)이라고 합니다. 즉, 모든 번역의 집합은 공간 자체와 동형인 _번역 그룹 T_를 형성합니다. 함수의 주요 논리를 설명합니다. 따라서 HTML5 페이지에서 아래 코드를 실행합니다.
const empty = () => (e: T) => false
로그인 후 복사
로그인 후 복사
로그인 후 복사

여기서 ep_op는 캔버스의 ID입니다.

console.log('\nEmpty set:')
console.log('Is 7 in {}?', common.empty()(7))
로그인 후 복사
로그인 후 복사
로그인 후 복사

다음 결과를 제공합니다.

Functional Programming in TypeScript

동질성

Functional Programming in TypeScript

scalePoint를 세그먼트 SNSM과 같은 줄에 있도록 M 지점을 다른 지점 N으로 보내는 함수라고 가정합니다. , 그러나 λ배만큼 확장되었습니다. 집합의 대수학에서 척도는 다음과 같이 공식화됩니다:

Functional Programming in TypeScript

따라서 TypeScript의 구현은 다음과 같습니다.

npm install
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

여기서 (deltax, deltay)는 번역의 상수 벡터이고 (lambdax, Lambday)는 람다 벡터입니다.

스케일을 계획의 집합에 동질성을 적용하는 함수로 설정합니다. 이 함수는 TypeScript에서 다음과 같이 간단히 구현됩니다.

npm run numbers
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

scale은 첫 번째 유클리드 차원의 델타 거리인 deltax, 두 번째 유클리드 차원의 델타 거리인 deltay 및 상수 인자 벡터 λ인 (lambdax,lamday)를 매개변수로 사용합니다. 점 P (x, y)가 집합 S에서 축척을 통해 변환되면 해당 좌표는 (x', y') = (lambdax * x, delatx, Lambday * y, deltay). 따라서 점 ((x'- delatx)/lambdax, (y' - deltay)/lambday)는 항상 집합 S에 속합니다. 람다가 벡터와 다른 경우 물론 0입니다. 집합의 대수학에서 척도는 동형(isomorph)이라고 합니다. 즉, 모든 동형 집합은 공간 자체 {0}와 동형인 동형 그룹 H를 형성합니다. 함수의 주요 로직을 설명합니다.

따라서 HTML5 페이지에서 아래 코드를 실행합니다.

npm run plane
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

다음 결과를 제공합니다.

Functional Programming in TypeScript

회전

Functional Programming in TypeScript

rotatePoint를 각도 θ로 점을 회전시키는 함수라고 하겠습니다. 행렬 대수학에서 RotatePoint는 다음과 같이 공식화됩니다.

Functional Programming in TypeScript

여기서 (x', y')는 회전 후 점의 좌표이고 x'y'의 공식은 다음과 같습니다. 다음과 같습니다:

Functional Programming in TypeScript

이 공식의 시연은 매우 간단합니다. 이번 로테이션을 살펴보세요.

Functional Programming in TypeScript

시연 아래:

Functional Programming in TypeScript

따라서 TypeScript의 구현은 다음과 같습니다.

npm install
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

회전을 각도 θ를 갖는 평면상의 집합에 회전을 적용하는 함수라고 하겠습니다. 이 함수는 TypeScript에서 간단히 다음과 같이 구현됩니다.

npm run numbers
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

rotate는 회전 각도인 theta를 매개변수로 사용하는 함수입니다. 점 P (x, y)가 집합 S에서 회전을 통해 변환되면 해당 좌표는 (x', y') = (x * cos(세타) - y * 죄(세타), x * 죄(세타), y * cos(세타)). 따라서 점 (x' * cos(theta), y' * sin(theta), y' * cos(theta) - x' * sin(theta))는 항상 집합 에. 집합 대수학에서는 회전을 동형(isomorph)이라고 합니다. 즉, 모든 회전의 집합은 공간 자체와 동형인 회전군 R을 형성합니다. 함수의 주요 로직을 설명합니다.

따라서 HTML5 페이지에서 아래 코드를 실행합니다.

npm run plane
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
다음 결과를 제공합니다.

Functional Programming in TypeScript

더 나아가고 싶은 사람들을 위해

아주 간단하죠? 더 나아가고 싶은 분들은 다음을 살펴보세요:

    타원
  • 3차원 유클리드 공간
  • 타원체
  • 포물면
  • 쌍곡선
  • 구형 고조파
  • 초타원체
  • 하우메아
  • 호모에이드
  • 포칼로이드
프랙탈

Functional Programming in TypeScript

프랙탈은 일반적으로 위상적 차원을 초과하고 정수 사이에 속할 수 있는 프랙탈 차원을 갖는 집합입니다. 예를 들어,

만델브로 집합은 복소수 2차 다항식 계열로 정의된 프랙탈입니다.

npm run fractals
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
여기서 c는 복소수입니다.

만델브로 프랙탈은 위의 수열이 무한대로 탈출하지 않도록 모든 점 c의 집합으로 정의됩니다. 집합 대수에서는 다음과 같이 공식화됩니다.

Functional Programming in TypeScript

프랙털(추상 데이터 유형)은 TypeScript에서 항상 다음과 같이 표현될 수 있습니다.

S'(x) = true if x is in S'
S'(x) = false if x is not in S'
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
복소수와 그림

프랙탈을 그리려면

복소수를 조작해야 했습니다. 따라서 아래의 Complex 클래스를 만들었습니다.

S'(a) = S'(b) = true
S'(c) = S'(d) = false
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
만델브로트 프랙탈

아래에서 사용할 수 있는

Mandelbrot Fractal(추상 데이터 유형 표현) P(z) = z^2 c를 만들었습니다.

npm install
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
_Complex_ 숫자를 그릴 수 있도록 `ComplexPlane` 클래스를 만들었습니다. 아래는 TypeScript로 구현한 것입니다.
npm run numbers
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

따라서 아래 코드를 실행합니다.

npm run plane
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

여기서 프랙탈은 캔버스의 ID입니다.

npm run fractals
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

다음 결과를 제공합니다.

Functional Programming in TypeScript

더 나아가고 싶은 사람들을 위해

더 나아가고 싶은 분들은 다음을 살펴보세요.

  • 뉴턴 프랙탈
  • 줄리아 프랙탈
  • 기타 도형

그렇습니다! 재미있게 읽으셨기를 바랍니다.

위 내용은 TypeScript의 함수형 프로그래밍의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!