봄수의 연구실

Scheme 본문

Computer Science/프로그래밍 언어론

Scheme

berom 2023. 4. 9. 16:41

리스트를 다루는 연산

  • 문법 자체는 일관성이 있고 간단하다
  • 함수 자체를 매개 변수로 전달 할 수 있다
  • 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는 각각에 대해 적용하는거임
  • 지연 변수가 그 스코프 안에서만 사용 된다
  • ; 뒤의 내용은 모두 주석이라 생각하면 된다는데?

(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