CS/Programming Language

ML: Semantics - "Types", Polymorphism, Scope

WakaraNai 2022. 11. 10. 14:34
728x90
반응형

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 변수 등이 선언됨으로써 차후에 문제가 발생할 여지가 남게 된다

Imperative and Functional

 

 

 

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인지 구분할 줄 알아야 함

 

ML과 Python의 Functional Programming 1: No Local Variable
ML과 Python의 Functional Programming 2: recursive by head and tail
ML과 Python의 Functional Programming 2: recursive by head and tail
practice - cycle : [hd x]로 해도 list가 나온다

 

 

 

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 

 

음수: - 대신 ~

 

변수에 함수 할당하기

728x90
반응형

'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