리스트를 다루는 연산
- 문법 자체는 일관성이 있고 간단하다
- 함수 자체를 매개 변수로 전달 할 수 있다
- Dynamic typing
- 동적 타입 지원
- 꼬리 재귀(tail recursion) 최적화
- 데이터 타입은 Atom, List 기타 등등
- 일단은 2가지로 표현 된다
- Atom : symbol과 number로 표현한다
- List
- s-expression
- 리스프 언어에서는 모든 데이터나 코드를 트리로 표현 할 수 있음
- 리스트 프로세싱 언어라 이름을 가진 이유는 그 당시에는 리스트에 최적화 된 언어는 혁신이었다
- 앞에 ’ 도 신경 써야 함
- car
- 처음 요소를 반환한다
- cdr
- 첫 번째 것 빼고 나머지를 반환한다
- 첫 번째 것 빼고 나머지를 반환한다
- cdr을 먼저하고 car을 하는거임
- 이게 우선순위가 그냥 뒤에서부터 차례대로 실행하는구조임
- 일종의 스택 같기도 하고?
- 매우 어지럽다,
- 그냥 진짜 함수네
- 겹겹겹겹겹겹 함수 구조임
- 가독성은 내다 버린건가
지금은 구려보이는데 포틀란 시절에는 혁신이었다네 - 어떤 값을 삽입 할 때는 cons
- 기호를 리스트에 삽입 할 때 사용하는거임
- 정확히는 주어진 인자를 엘리먼틀 하나로 보는거임
- 리스트도 엘리먼트임
- append()
- symbol이 아니라 리스트 두개를 합치고 싶을 때 사용
- 그 원소들을 for 문 돌려서 요소 하나하나씩 넣어준다고 생각하자
상수 관련
- 변수가 없다고 하긴 했지만 대부분의 함수형 프로그래밍 언어는 변수나 루프 등을 내부적으로 있긴함
- 찐 함수형 언어는 없기도 함
- 모나드?
- 정의랑 할당을 분리해둔거야?
- ‘#f’ : false임 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
- 전위 연산을 선호하는 언어인가?
- 빈 리스트 ()는 스킴에서는 참이라고 한다. 그래서 반환도 참인 ()를 반환하는거야
- 그러면 왜
#f
- 숫자 0도 참이다
#f
외에는 모두 참이다
- 그러면 왜
- or
- 첫 번째로 같은 값을 반환하는?
- 잘모르겠네
- 하나식 반환을 하면서 모두 참이면 첫 번째 요소를 반환 함
- 위의 예시의 마지막 꺼는 뭐냐?
- and
- 마지막까지 참인지 체크하고, 맞으면 마지막 것을 반환
- 마지막까지 참인지 체크하고, 맞으면 마지막 것을 반환
- list는 또 리스트를 만들어주는 함수네
- member는 매칭 되는 것부터 나머지를 반환하는 함수임
- 아니면 그냥 탈락시킴
- 테이블 형태 딕셔너리 형태로 있는 값에 대해서 어떤 값, 매칭 되는 값을 반환하는 형태의 연산자
- b라는 키가 a,c에 있니?
- 테이블 형태의 데이터를 탐색하는게 가능하데
- 리스트 안에 있는 것을 키로 반환한다
- a,b,c를 데이터 취급해주세요
- a와 b를 참 거짓 체크하는거임
- 리스트를 박으면 안되는거네, 그냥 나열을 해야 함
- apply
- 첫 번째 주어진 함수를 list를 적용 가능하다.
- 아래 맵은 오퍼레이션을 넣네
- 리스트의 각각의 요소에게 car을 적용을 하는 거임
- 그냥 람다를 가져다가 사용할 수도 있음
- x라는 값을 받아서 x+x 해주세요
- 람다 대수에서 다룬 것이랑 구조가 똑같구나
- [[Scheme에서 map과 apply의 차이]]
- 변수 x의 값을 변경할거임 : set! x (+ x n )
- for-each는 각각에 대해 적용하는거임
- for-each는 각각에 대해 적용하는거임
- 지연 변수가 그 스코프 안에서만 사용 된다
- ; 뒤의 내용은 모두 주석이라 생각하면 된다는데?
(define x 2 ) (define y 2 ) (case (* x y) (3 'three) (4 'four) (else 'none) )
- 낄낄 재밌구만
- 리스프 매력있네, 보다보니까 확실히 편한 듯
(define (add2 x) (+x 2) )
(define (add2 x) (+ x 2)) (define (test x y) (if (> x y) (add2 x) (add2 y) ) ) (test 2 4) (test 4 2)
- scheme의 condition-state의 경우 모두 ()로 한 쌍씩 묶이는거구만
- 보면 함수 scope는 사실 동일한 듭
- 46 페이지 젠장
해당 에러는 지역 변수의 스코프를 벗어나서 발생한 문제이다
함수 블럭을 감싸고 싶으면 begin을 사용해야 한다
- 루프를 기묘하게 도네
- custom-member는 Item과 lst를 인자로 받는다
- 루프 안에서 temp-lst를 지역 변수처럼 사용한다
- temp-lst를 lst로 설정한다.
- 이거 복습 픽요하다
728x90
'Computer Science > 프로그래밍 언어론' 카테고리의 다른 글
객체 지향 언어 (0) | 2023.04.09 |
---|---|
함수형 언어 (0) | 2023.04.09 |
프로그래밍 언어 설계 원칙 (0) | 2023.04.09 |
형식 언어 (3) - 형식 문법 표현 방법 (0) | 2023.04.08 |
형식 언어 (2) - 언어 (0) | 2023.04.08 |