Categories of Programming Languages
Functional Languages
ex) ML, Lisp
익명함수(lambda)로 표현 가능한 함수를 사용하기
Declarative Way
- 커피 시킬 때 어떤 우유, 커피콩 써야할지 말하지 않고 커피 달라고만 이야기하면 나온다.
state-free
- 남이 작성한 코드 수정하기 좋음. 코드를 각 블록 별로 모듈화하여 다루기 때문 == side-effect/외부 영향을 받지 않는다.
- 변수에 값을 저장하는 일을 최소화하자 no assignment
- recursive로 반복 -> 함수 내에 지역변수를 선언할 필요가 없어짐
- base unit : 작은 함수들을 여러 개 만들어서 조합하는 것이 목적 - divide and qunquer
- Higher-Order Function (고차원 함수를 사용하자) (함수 여러개를 조합해서, 사용해서 만들어진 큰 함수를 의미함)
referential transparency
함수의 결과과 외부 영향을 받지 않고, 오로지 파라미터의 영향만 받는다
왼쪽은 result, i 변수 등이 선언됨으로써 차후에 문제가 발생할 여지가 남게 된다
ML
meta language
폰노이만 bottleneck
tuple
- 원소의 데이터 타입은 다양해도 된다
- 인덱스가 1부터 시작한다
- 인덱싱: #i 튜플이름 -> 주의!! #1 (1)은 (1)을 integer로 고려하기에 에러 발생
list
- 원소의 데이터 타입은 모.두. 동.일!!
- empty list : []; or nil;
- 이렇게 선언 시 어떤 타입이 들어올지 알 수 없기 때문에 'a라는 말을 통해 type unknown임을 알린다
null -> boolean (isNull?)
@ operator == list concat
같은 리스트 끼리 @,
:: (cons) operator == list builder
head+tail(list)
hd, tl
1::2::nil; 도 가능
hd -> 맨 앞 원소
tl -> 그 외 원소들을 리스트로 반환. !!!! 리스트 입력만 가능
explode & implode - (split)
Wildcard _ : 어떤 타입이라도 매칭 가능함을 나타냄
Practice 1
fun : 함수
- Creates a new function value
- Binds that function value to a name
ML이 파이썬과 다른 점. statement가 아닌 expression이 들어가기에 return이 없음
이것이 functional programming의 특성
ML은 parameter는 1개만 허용.
이 이상이면 튜플로 하나의 값을 패싱하는 것임
python이 multiple paradiagm 이니
어떤 코드가 function parameter인지 구분할 줄 알아야 함
Data Type
* : type constructor == type annotator
Precedence - 그래도 명확함을 위해 ()를 붙여주세요
list > ~~~ > real
- int * bool list ===. int * (bool list)
- int * bool list -> real ===. (int * (bool list)) -> real
Restrict Parameter Type
음수: - 대신 ~
변수에 함수 할당하기
'CS > Programming Language' 카테고리의 다른 글
Semantics Analyzer : Type (0) | 2022.11.11 |
---|---|
ML: Higher-order Functions (0) | 2022.11.11 |
Language Systems (0) | 2022.11.03 |
모호성 (0) | 2022.10.31 |
Programming Syntax 2 (0) | 2022.10.30 |