2. 거품, 린스, 반복: REPL 살펴보기

  • 가장 많이 쓰이는 Common Lisp 환경: Emacs + SLIME
    • 이게 Portacle이 포함하고 있는 것이다. 👉
      macOS에서 Protacle 설치 삽질기
    •  

      Lisp 구현채 선택

    • 나도 가장 애 먹은 부분. 라행이 요즘은 구현제가 많이 나와 있고 설치도 쉽다. 일단 Portacle 추천.
      • Emacs
      • SLIME
      • SBCL[Steel Bank Common Lisp)
    • 이 책의 소스는 Common Lisp을 만족하는 시스템에서는 대부분 돌아다고 함.
    •  

      Lisp 실행하고 시작하기

    • Lisp을 배우려면 결국 Emacs에도 익숙해져야 하는가.
      • Emacs 튜토리얼을 통해서 익숙해지는 게 좋겠다. C-h t.
        • C Ctrl, M Meta[Alt, Command).
          • macOS에서는 META 키는 Optoin이다!
      • 그 밖에도 C-h i, C-h k, C-h ? 등 다양하다.
    • Emacs에서 버퍼 스위칭
      • C-x b
       

      마음을 편안히: 대화식 프로그래밍

    • Common Lisp의 REPL(Read, Evaluate, Print Loop)은 CL-USER.
    • REPL에서 Lisp의 값은 조사하고 바꾸고 함수도 재정의할 수 있다.
    • Emacs는 Lisp의 REPL과 밀접한 관계를 갖고 있다.
      • 텍스트 에디터에 있는 사항이 아마도 REPL 에 바로 반영되는 게 아닌가 싶다. 이건 나중에 확인 필요.
       

      REPL에서 실험해보기

    • Lisp의 가장 간단한 표현식은 숫자.
    • 10
      🗣
      10
    • 자체 평가 객체(self-evaluating object): 그 자체로서 평가가 가능한 객체. 10 같은 것.
    • (+ 2 3)
      🗣
      5
       
    • Lisp에서 ( )에 들어 있는 모든 것은 리스트이다.
      • (+ 2 3)에서 +은 심볼, 2, 3은 값이다. 세 개의 요소를 갖는다.
    • 첫 번째 요소는 함수, 나머지 요소는 평가되어 이 함수에 전달되는 인자.
      • +는 함수의 이름, 2, 3은 인자로 +에 전달. +는 덧셈 함수로 결과값 5를 내놓는다.
       

      Lisp 스타일의 "Hello, World!"

    • 모든 프로그래밍 언어세어 첫 번째로 하는 일. Lisp에서라면
    • "Hello, world"
      🗣
      "Hello, world"
    • 숫자와 마찬가지로 문자열 리터럴도 자체 평가 오브젝트.
    • 사실 이건 프로그램이 아니라 이다. 프로그램을 만들어보자.
    • (format t "Hello, world")
      🗣
      Hello, world NIL
    • format 은 Common Lisp에서 문자열을 포맷하는 함수. 첫 번째 인자로 t(참)를 넘기면 문자열을 표준 출력으로 표시하겠다는 말이다.
    • Lisp의 REPL은 언제나 함수의 결괏값을 표시하는데 format은 아무것도 내놓지 않는(NIL)다.
    • 함수를 정의하라면 defun 을 사용한다.
    • (defun hello-world () (format t "Hello, world"))
      🗣
      HELLO-WORLD
    • Lisp에서 함수 이름은 - 를 이용해서 단어를 구분하고 영문으로 짓는다.
      • hello_world, helloWorld 등은 관례에 어긋난다는 뜻.
      • 음... 그럼, 한글로는 이름을 지을 수 없나? 만약 Lisp이 유니코드를 지원하고 UTF-8을 지원하는 상태에서 한글로 이름을 지을 수 있으면 정말 대박일 것 같다.
      📎
      (defun 함수이름 (인자리스트) 함수몸체)
    • format이 화면에 문자열을 출력하는 부수 효과(side effect)가 있듯이, defun 은 함수를 만드는 부수 효과가 있다. 그리고 그 함수를 리턴값으로 내놓는다. 여기서는 HELLO-WORLD.
    • 함수를 호출하려면 ( )에 묶어서 쓴다.
    • (hello-world)
      🗣
      Hello, world NIL
       

      작업 저장하기

    • Emacs에서
      • 새 파일 만들기: C-x C-f
      • 파일 저장하기: C-x C-s
      • REPL로 돌아가기: C-c C-z
      • defun컴파일하기: C-c C-c slime-compile-defun
      • 닫는 괄호 삽입하기: C-c C-q slimie-close-parens-at-point
    • Lisp의 확장자는 .lisp, .cl 사용. (Common Lisp)
    •