내용물
- 소개
- TypeScript 환경
- 함수를 통한 데이터 표현
- 세트
- 바이너리 연산
- 더 나아가
- 유클리드 평면
- 디스크 그리기
- 수평 및 수직 반평면 그리기
- 기능
- 더 나아가
- 프랙탈
- 복소수와 그림
- 만델브로트 프랙탈
- 더 나아가
여기에서 소스 코드를 찾을 수 있습니다: 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를 통해 집합의 대수학에서 몇 가지 기본 집합의 표현을 소개합니다.
빈 세트
E를 빈 집합으로 두고 특성 함수를 비우세요. 집합 대수학에서 E는 요소가 없는 고유한 집합입니다. 따라서 공백은 다음과 같이 정의할 수 있습니다.
npm run fractals
따라서 TypeScript의 E 표현은 다음과 같이 정의할 수 있습니다.
S'(x) = true if x is in S' S'(x) = false if x is not in S'
집합 대수학에서 공백은 다음과 같이 표현됩니다.
따라서 아래 코드를 실행합니다.
S'(a) = S'(b) = true S'(c) = S'(d) = false
다음과 같은 결과를 제공합니다.
모두 설정
S를 집합으로 하고 S'를 모든 요소와 특성 함수를 모두 포함하는 S의 부분 집합이라고 가정합니다. 집합 대수학에서 S'는 모든 요소를 포함하는 전체 집합입니다. 따라서 All은 다음과 같이 정의할 수 있습니다.
S'(a) = S'(b) = true S'(c) = S'(d) = false
따라서 TypeScript의 S' 표현은 다음과 같이 정의할 수 있습니다.
type Set<t> = (x: T) => boolean </t>
집합 대수학에서 All은 다음과 같이 표현됩니다.
따라서 아래 코드를 실행합니다.
npm install
다음과 같은 결과를 제공합니다.
싱글톤 세트
E를 싱글톤 집합으로 하고 싱글톤을 특성 함수라고 합니다. 집합의 대수학에서 E는 단위 집합이라고도 알려져 있으며, 1-튜플은 정확히 하나의 요소 e를 갖는 집합입니다. 따라서 싱글톤은 다음과 같이 정의할 수 있습니다.
npm run numbers
따라서 TypeScript의 E 표현은 다음과 같이 정의할 수 있습니다.
npm run plane
따라서 아래 코드를 실행합니다.
npm run fractals
다음과 같은 결과를 제공합니다.
기타 세트
이 섹션에서는 정수 집합의 하위 집합을 보여줍니다.
짝수
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
다음과 같은 결과를 제공합니다.
홀수
E를 홀수의 집합으로 하고 Odd를 특성함수로 둡니다. 수학에서 홀수는 2의 배수가 아닌 수를 말합니다. 따라서 Odd는 다음과 같이 정의할 수 있습니다.
type Set<t> = (x: T) => boolean </t>
따라서 TypeScript의 E 표현은 다음과 같이 정의할 수 있습니다.
Empty(x) = false if x is in E Empty(x) = false if x is not in E
따라서 아래 코드를 실행합니다.
const empty = () => (e: T) => false
다음과 같은 결과를 제공합니다.
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
다음과 같은 결과를 제공합니다.
5의 배수
E를 5의 배수 집합으로 하고 MultipleOfFive를 특성 함수로 가정합니다. 수학에서 5의 배수는 5로 나누어지는 숫자입니다. 따라서 MultipleOfFive는 다음과 같이 정의할 수 있습니다.
npm install
따라서 TypeScript의 E 표현은 다음과 같이 정의할 수 있습니다.
npm run numbers
따라서 아래 코드를 실행합니다.
npm run plane
다음과 같은 결과를 제공합니다.
소수
오래 전 프로젝트 오일러 문제를 풀 때 다음 문제를 해결해야 했습니다.
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 </t>
다음과 같은 결과를 제공합니다.
바이너리 연산
이 섹션에서는 주어진 세트에서 새로운 세트를 구성하고 세트를 조작하기 위한 몇 가지 기본 작업을 소개합니다. 집합 대수학의 Ven 다이어그램 아래
노동 조합
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
다음과 같은 결과를 제공합니다.
교차로
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
다음과 같은 결과를 제공합니다.
데카르트 곱
E와 F를 2개의 집합으로 둡니다. E × F로 표시되는 E와 F의 데카르트 곱은 e가 E의 멤버이고 f가 F의 멤버인 모든 순서쌍(e, f)의 집합입니다.
CartesianProduct를 Cartesian Product 연산으로 설정합니다. 따라서 CartesianProduct 작업은 TypeScript에서 다음과 같이 구현될 수 있습니다.
npm install
아래 코드 실행:
npm run numbers
다음과 같은 결과를 제공합니다.
보완
E와 F를 2개의 집합으로 둡니다. E에서 F의 상대보색은 E F로 표시되며 E의 구성원이지만 F의 구성원이 아닌 모든 요소의 집합입니다.
Complement를 상대적인 보완 연산으로 둡니다. 따라서 Complement 연산은 TypeScript에서 다음과 같이 구현될 수 있습니다:
npm run plane아래 코드를 실행합니다:
npm run fractals
다음과 같은 결과를 제공합니다.
대칭적 차이
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
다음과 같은 결과를 제공합니다.
기타 작업
이 섹션에서는 세트에 대한 기타 유용한 이진 연산을 소개합니다.
포함
Contains를 요소가 집합에 있는지 여부를 확인하는 작업으로 설정합니다. 이 연산은 요소를 매개변수로 취하고 요소가 세트에 있으면 true를 반환하고 그렇지 않으면 false를 반환하는 함수입니다.
따라서 이 작업은 TypeScript에서 다음과 같이 정의됩니다.
type Set<t> = (x: T) => boolean </t>
따라서 아래 코드를 실행하세요.
npm install
다음 결과를 제공합니다.
추가하다
Add를 집합에 요소를 추가하는 작업으로 둡니다. 이 작업은 요소를 매개변수로 가져와 세트에 추가하는 함수입니다.
따라서 이 작업은 TypeScript에서 다음과 같이 정의됩니다.
npm run numbers
따라서 아래 코드를 실행하세요.
npm run plane
다음 결과를 제공합니다.
제거하다
제거를 집합에서 요소를 제거하는 작업으로 둡니다. 이 작업은 요소를 매개변수로 가져와 세트에서 제거하는 함수입니다.
따라서 이 작업은 TypeScript에서 다음과 같이 정의됩니다.
npm run fractals
따라서 아래 코드를 실행하세요.
S'(x) = true if x is in S' S'(x) = false if x is not in S'
다음 결과를 제공합니다.
더 나아가고 싶은 사람들을 위해
함수형 프로그래밍을 통해 TypeScript에서 집합 대수학을 얼마나 쉽게 수행할 수 있는지 확인할 수 있습니다. 이전 섹션에서는 가장 기본적인 정의를 보여주었습니다. 하지만 더 나아가고 싶다면 다음을 생각해 보세요.
- 집합보다 관계
- 모노이드, 그룹, 필드, 링, K-벡터 공간 등과 같은 추상 대수
- 포함-배제 원칙
- 러셀의 역설
- 칸토어의 역설
- 이중 벡터 공간
- 정리와 추론
유클리드 평면
이전 섹션에서는 세트에 대한 기본 개념을 TypeScript로 구현했습니다. 이번 섹션에서는 유클리드 평면에 구현된 개념을 연습해보겠습니다.
디스크 그리기
디스크는 원으로 둘러싸인 평면의 부분 집합입니다. 디스크에는 두 가지 유형이 있습니다. 경계를 구성하는 원의 점을 포함하는 디스크인 닫힌 디스크와 경계를 구성하는 원의 점을 포함하지 않는 디스크인 열린 디스크
이번 섹션에서는 닫힌 디스크의 특성 기능을 설정하고 HTML5 페이지에 그려보겠습니다.
특성 함수를 설정하려면 먼저 평면의 두 점 사이의 유클리드 거리를 계산하는 함수가 필요합니다. 이 기능은 다음과 같이 구현됩니다.
S'(a) = S'(b) = true S'(c) = S'(d) = false
포인트는 아래에 정의되어 있습니다.
S'(a) = S'(b) = true S'(c) = S'(d) = false
이 공식은 피타고라스의 정리를 기반으로 합니다.
여기서 c는 유클리드 거리이고, a²는 (p1.X - p2.X)²이고 b²는 (p1.Y - p2.Y)²입니다.
디스크를 폐쇄형 디스크의 특징 기능으로 두세요. 집합의 대수학에서 실수 집합의 닫힌 디스크에 대한 정의는 다음과 같습니다.
여기서 a와 b는 중심 좌표이고 R은 반경입니다.
따라서 TypeScript의 Disk 구현은 다음과 같습니다.
npm install
세트를 HTML5 페이지에서 보기 위해 유클리드 평면에 세트를 그리는 함수 draw를 구현하기로 했습니다. 저는 HTML5를 선택하여 캔버스 요소를 사용하여 그림을 그렸습니다.
그래서 메소드 드로우를 통해 아래 그림의 유클리드 평면을 만들어봤습니다.
아래는 비행기 구현입니다.
npm run numbers
그리기 기능에서는 유클리드 평면 컨테이너와 동일한 너비, 동일한 높이의 캔버스가 생성됩니다. 그런 다음 캔버스의 픽셀(x,y) 단위 각 점이 세트에 속하는 경우 검은색 점으로 대체됩니다. xMin, xMax, yMin, yMax는 위의 유클리드 평면 그림
에 표시된 경계값입니다.아래 코드 실행:
npm run plane
여기서 disk는 캔버스의 ID입니다.
npm run fractals
다음 결과를 제공합니다.
수평 및 수직 반평면 그리기
수평 또는 수직 반면은 평면이 유클리드 공간을 나누는 두 부분 집합 중 하나입니다. 수평 반평면은 위 그림과 같이 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
다음 결과를 제공합니다.
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'
다음 결과를 제공합니다.
기사의 첫 번째 섹션에서는 세트에 대한 기본 이진 연산을 설정했습니다. 따라서 예를 들어 디스크와 반 평면의 교차점을 결합하여 반 디스크 하위 집합을 그릴 수 있습니다.
따라서 아래 샘플을 실행하세요.
S'(a) = S'(b) = true S'(c) = S'(d) = false
여기서 hd는 캔버스의 ID입니다.
S'(a) = S'(b) = true S'(c) = S'(d) = false
다음 결과를 제공합니다.
기능
이 섹션에서는 유클리드 평면의 세트에 대한 기능을 설명합니다.
번역하다
translatePoint를 평면의 한 점을 이동하는 함수로 둡니다. 유클리드 기하학에서 TranslatePoint는 주어진 점을 지정된 방향으로 일정한 거리만큼 이동시키는 함수입니다. 따라서 TypeScript의 구현은 다음과 같습니다.
type Set<t> = (x: T) => boolean </t>
여기서 (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))
다음 결과를 제공합니다.
동질성
scalePoint를 세그먼트 SN이 SM과 같은 줄에 있도록 M 지점을 다른 지점 N으로 보내는 함수라고 가정합니다. , 그러나 λ배만큼 확장되었습니다. 집합의 대수학에서 척도는 다음과 같이 공식화됩니다:
따라서 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
다음 결과를 제공합니다.
회전
rotatePoint를 각도 θ로 점을 회전시키는 함수라고 하겠습니다. 행렬 대수학에서 RotatePoint는 다음과 같이 공식화됩니다.
여기서 (x', y')는 회전 후 점의 좌표이고 x' 및 y'의 공식은 다음과 같습니다. 다음과 같습니다:
이 공식의 시연은 매우 간단합니다. 이번 로테이션을 살펴보세요.
시연 아래:
따라서 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다음 결과를 제공합니다.
아주 간단하죠? 더 나아가고 싶은 분들은 다음을 살펴보세요:
- 타원
- 3차원 유클리드 공간
- 타원체
- 포물면
- 쌍곡선
- 구형 고조파
- 초타원체
- 하우메아
- 호모에이드
- 포칼로이드
만델브로 집합은 복소수 2차 다항식 계열로 정의된 프랙탈입니다.
npm run fractals여기서 c는 복소수입니다.
만델브로 프랙탈은 위의 수열이 무한대로 탈출하지 않도록 모든 점 c의 집합으로 정의됩니다. 집합 대수에서는 다음과 같이 공식화됩니다.
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
다음 결과를 제공합니다.
더 나아가고 싶은 사람들을 위해
더 나아가고 싶은 분들은 다음을 살펴보세요.
- 뉴턴 프랙탈
- 줄리아 프랙탈
- 기타 도형
그렇습니다! 재미있게 읽으셨기를 바랍니다.
위 내용은 TypeScript의 함수형 프로그래밍의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

JavaScript는 웹 페이지의 상호 작용과 역학을 향상시키기 때문에 현대 웹 사이트의 핵심입니다. 1) 페이지를 새로 고치지 않고 콘텐츠를 변경할 수 있습니다. 2) Domapi를 통해 웹 페이지 조작, 3) 애니메이션 및 드래그 앤 드롭과 같은 복잡한 대화식 효과를 지원합니다. 4) 성능 및 모범 사례를 최적화하여 사용자 경험을 향상시킵니다.

C 및 JavaScript는 WebAssembly를 통한 상호 운용성을 달성합니다. 1) C 코드는 WebAssembly 모듈로 컴파일되어 컴퓨팅 전력을 향상시키기 위해 JavaScript 환경에 도입됩니다. 2) 게임 개발에서 C는 물리 엔진 및 그래픽 렌더링을 처리하며 JavaScript는 게임 로직 및 사용자 인터페이스를 담당합니다.

JavaScript는 웹 사이트, 모바일 응용 프로그램, 데스크탑 응용 프로그램 및 서버 측 프로그래밍에서 널리 사용됩니다. 1) 웹 사이트 개발에서 JavaScript는 HTML 및 CSS와 함께 DOM을 운영하여 동적 효과를 달성하고 jQuery 및 React와 같은 프레임 워크를 지원합니다. 2) 반응 및 이온 성을 통해 JavaScript는 크로스 플랫폼 모바일 애플리케이션을 개발하는 데 사용됩니다. 3) 전자 프레임 워크를 사용하면 JavaScript가 데스크탑 애플리케이션을 구축 할 수 있습니다. 4) node.js는 JavaScript가 서버 측에서 실행되도록하고 동시 요청이 높은 높은 요청을 지원합니다.

Python은 데이터 과학 및 자동화에 더 적합한 반면 JavaScript는 프론트 엔드 및 풀 스택 개발에 더 적합합니다. 1. Python은 데이터 처리 및 모델링을 위해 Numpy 및 Pandas와 같은 라이브러리를 사용하여 데이터 과학 및 기계 학습에서 잘 수행됩니다. 2. 파이썬은 간결하고 자동화 및 스크립팅이 효율적입니다. 3. JavaScript는 프론트 엔드 개발에 없어서는 안될 것이며 동적 웹 페이지 및 단일 페이지 응용 프로그램을 구축하는 데 사용됩니다. 4. JavaScript는 Node.js를 통해 백엔드 개발에 역할을하며 전체 스택 개발을 지원합니다.

C와 C는 주로 통역사와 JIT 컴파일러를 구현하는 데 사용되는 JavaScript 엔진에서 중요한 역할을합니다. 1) C는 JavaScript 소스 코드를 구문 분석하고 추상 구문 트리를 생성하는 데 사용됩니다. 2) C는 바이트 코드 생성 및 실행을 담당합니다. 3) C는 JIT 컴파일러를 구현하고 런타임에 핫스팟 코드를 최적화하고 컴파일하며 JavaScript의 실행 효율을 크게 향상시킵니다.

실제 세계에서 JavaScript의 응용 프로그램에는 프론트 엔드 및 백엔드 개발이 포함됩니다. 1) DOM 운영 및 이벤트 처리와 관련된 TODO 목록 응용 프로그램을 구축하여 프론트 엔드 애플리케이션을 표시합니다. 2) Node.js를 통해 RESTFULAPI를 구축하고 Express를 통해 백엔드 응용 프로그램을 시연하십시오.

웹 개발에서 JavaScript의 주요 용도에는 클라이언트 상호 작용, 양식 검증 및 비동기 통신이 포함됩니다. 1) DOM 운영을 통한 동적 컨텐츠 업데이트 및 사용자 상호 작용; 2) 사용자가 사용자 경험을 향상시키기 위해 데이터를 제출하기 전에 클라이언트 확인이 수행됩니다. 3) 서버와의 진실한 통신은 Ajax 기술을 통해 달성됩니다.

보다 효율적인 코드를 작성하고 성능 병목 현상 및 최적화 전략을 이해하는 데 도움이되기 때문에 JavaScript 엔진이 내부적으로 작동하는 방식을 이해하는 것은 개발자에게 중요합니다. 1) 엔진의 워크 플로에는 구문 분석, 컴파일 및 실행; 2) 실행 프로세스 중에 엔진은 인라인 캐시 및 숨겨진 클래스와 같은 동적 최적화를 수행합니다. 3) 모범 사례에는 글로벌 변수를 피하고 루프 최적화, Const 및 Lets 사용 및 과도한 폐쇄 사용을 피하는 것이 포함됩니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

Dreamweaver Mac版
시각적 웹 개발 도구

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.
