최근 수정 시각 : 2025-10-03 16:50:59

Common Lisp


[[프로그래밍 언어|'''프로그래밍 언어
{{{#!wiki style="font-family: Times New Roman, serif; display: inline;"
]]
{{{#!wiki style="min-height: calc(1.5em + 5px); margin: 0 -10px -5px"
{{{#!wiki style="display: inline-table; min-width: 40%; min-height: calc(1.5em + 5px)"
{{{#!folding [ 목록 ]
{{{#!wiki style="margin: -5px -1px"
<colbgcolor=royalblue><colcolor=#fff> ※ 나무위키에 등재된 프로그래밍 언어 목록
AActionScript · AdaT · AgdaTP · ALGOLT · ApexT · APL · awk · AssemblyT
BBASIC
C파일:C언어 로고.svg CT · 파일:C C#T · 파일:C++ 로고.svg C++T · CarbonT · 파일:clojure_logo.png ClojureS · COBOLT · CoffeeScript · Common LispS · CrystalT
D파일:external/upload.wikimedia.org/D_programming_language_logo.png DT · 파일:Dart 심볼.svg DartT
EElixir · 파일:Elm_logo.svg.png elmT · Erlang
F파일:fsharp-logo.png F#T · Factor · 파일:fennel-logo.svg FennelS · 파일:forth.png Forth · FortranT
GGNU Octave · 파일:Go 로고.svg GoT · Groovy
H파일:Haskell 로고 심볼.svg HaskellT · HolyCT
I
J파일:Java 로고.svg JavaT · 파일:JavaScript 로고.svg JavaScript · 파일:julia-dots.svg Julia
K파일:Kotlin 심볼.svg KotlinT · Krait
LLeanTP · 파일:LISP_logo.svg LISPS · 파일:Lua 로고.svg Lua
MMATLAB · MaxV · MojoT · Moonlight
N파일:Nim 왕관 로고.svg NimT · 파일:Nix 로고.svg Nix
OOberonT · Objective-CT · 파일:ocaml.svg OCamlT
PPascalT · Perl · 파일:PHP 로고.svg PHP · Processing · Prolog · 파일:Python 심볼.svg Python
QQ#T
R파일:R 로고.svg R · 파일:racket-logo.svg RacketS · Raku · ReasonMLT · RocqTP · 파일:Ruby 로고.svg Ruby · 파일:Rust 로고.svg파일:Rust 로고 화이트.svg RustT
SSAS · 파일:Scala 로고.png ScalaT · SchemeS · 파일:스크래치(교육 플랫폼) 로고.svg ScratchV · sed · Shell Script · Smalltalk · 파일:Swift 심볼 배경.svg SwiftT
T파일:Typescript_logo_2020.svg TypeScriptT
UUdon
VVisual Basic · Visual Basic .NET · Visual Basic for Applications · vvvvV
WWave
XXSharp
Y
ZZenScript · 파일:Zig 로고마크.svg ZigT
한글누리 · V · 씨앗 · 약속 · 파일:엔트리 아이콘.svg 엔트리V · 창조
T: 정적 타입 프로그래밍 언어 · P: 증명 보조 언어 · S: LISP 방언 및 S-표현식 기반 언어 · V: 시각적 프로그래밍 언어 }}}}}}}}}{{{#!wiki style="display: inline-table; min-width: 40%; min-height: calc(1.5em + 5px)"
{{{#!folding [ 순위 ]
{{{#!wiki style="margin: -5px -1px -10px"
{{{#!wiki style="min-height: calc(1.5em + 5px); margin: 0 -10px -5px"
{{{#!wiki style="display: inline-table; min-width: 25%; min-height: calc(1.5em + 5px)"
{{{#!folding [ IEEE Spectrum 2024 ]
{{{#!wiki style="margin: -5px -1px"
<tablewidth=100%><tablebgcolor=transparent><colbgcolor=#11a500><colcolor=#fff> 스펙트럼 부문 상위 10개 프로그래밍 언어 <colbgcolor=#ff1100><colcolor=#fff> 직업 부문 상위 10개 프로그래밍 언어
1 Python 1 SQL
2 Java 2 Python
3 JavaScript 3 Java
4 C++ 4 TypeScript
5 TypeScript 5 SAS
6 SQL 6 JavaScript
7 C# 7 C#
8 Go 8 HTML
9 C 9 Shell
10 HTML 10 C++ }}}}}}}}}{{{#!wiki style="display: inline-table; min-width: 25%; min-height: calc(1.5em + 5px)"
{{{#!folding [ Stack Overflow 2024 ]
{{{#!wiki style="margin: -5px -1px"
<colbgcolor=#ffa500><colcolor=#fff> 2024년 Stackoverflow 설문조사 상위 25개 프로그래밍 언어
1 JavaScript <colbgcolor=#ffa500><colcolor=#fff> 14 Rust
2 HTML & CSS 15 Kotlin
3 Python 16 Lua
4 SQL 17 Dart
5 TypeScript 18 어셈블리어
6 Bash 19 Ruby
7 Java 20 Swift
8 C# 21 R
9 C++ 22 Visual Basic
10 C 23 MATLAB
11 PHP 24 VBA
12 PowerShell 25 Groovy
13 Go }}}}}}}}}{{{#!wiki style="display: inline-table; min-width: 25%; min-height: calc(1.5em + 5px)"
{{{#!folding [ TIOBE 2025 ]
{{{#!wiki style="margin: -5px -1px"
<colbgcolor=#2777c2><colcolor=#fff> 2025년 4월 TIOBE 검색어 점유율 상위 20개 프로그래밍 언어
1 Python <colbgcolor=#2777c2><colcolor=#fff> 11 Fortran
2 C++ 12 Scratch
3 C 13 PHP
4 Java 14 R
5 C# 15 Ada
6 JavaScript 16 MATLAB
7 Go 17 Assembly language
8 Visual Basic 18 Rust
9 Delphi / Object Pascal 19 Perl
10 SQL 20 COBOL }}}}}}}}}{{{#!wiki style="display: inline-table; min-width: 25%; min-height: calc(1.5em + 5px)"
{{{#!folding [ PYPL 2025 ]
{{{#!wiki style="margin: -5px -1px -10px"
<colbgcolor=green><colcolor=#fff> 2025년 5월 PYPL 검색어 점유율 상위 20개 프로그래밍 언어
1 Python <colbgcolor=green><colcolor=#fff> 11 Swift
2 Java 12 Go
3 JavaScript 13 Kotlin
4 C/C++ 14 MATLAB
5 C# 15 Ada
6 R 16 Ruby
7 PHP 17 Dart
8 Rust 18 Lua
9 TypeScript 19 VBA
10 Objective-C 20 PowerShell }}}}}}}}}}}} }}}}}}}}}}}}
실행 방식 · 분류 · 언어 목록(분류:프로그래밍 언어 문법) · 언어별 예제 · 틀:프로그래밍 언어 문법 · 틀:난해한 프로그래밍 언어

(princ "Hello, world!")
커먼 리스프
Common Lisp
파일:512px-Lisplogo.png
파일:홈페이지 아이콘.svg
1. 개요2. 목록3. 예제4. 설치5. 문법6. 코딩 컨벤션7. 관련 문서8. 외부 링크

1. 개요

  • 커먼 리스프(Common Lisp)는 프로그래밍 언어 LISP 방언 중 하나이다.
  • 커먼 리스프는 멀티 패러다임 언어이다.
  • 커먼 리스프는 lisp-2이다.

2. 목록

  • CLISP
  • Steel Bank Common Lisp(SBCL)
  • Allegro Common Lisp
  • LispWorks
  • Clozure CL

3. 예제

커먼 리스프에서 리스트의 길이를 확인하는 함수 my-length는 아래와 같이 작성한다.
(defun my-length (list)
  (if list
      (1+ (my-length (cdr list)))
      0))

4. 설치

  • CLISP
    • macOS
      • 터미널에서 아래와 같이 입력하면 CLISP를 설치할 수 있다.
        {{{brew install clisp
}}}

5. 문법

  • S-표현식: 해당 문서 참고.
  • 전역 변수
    • 커먼 리스프에서는 전역 변수를 탑 레벨 정의라고 한다. 명령어 defparameter를 사용해서 만든다.
    • 커먼 리스프에서 전역 변수 이름을 지을 때는 *로 감싼다. 예를 들어 *foo*와 같이 이름을 짓는다. * 두 개로 감싼 것을 귀마개라고 부르기도 한다. 귀마개는 강제 문법은 아니고 그냥 컨벤션이다. 반드시 그래야 하는 것은 아니지만 커먼 리스프에서 전역 변수 이름을 지을 때는 귀마개 쓰기를 권장한다.
    • defvar로도 전역 변수를 만들 수 있다. 그런데 defvar로 만든 전역 변수는 제일 처음 만든 것으로 고정되고 다시 같은 이름으로 다른 값을 선언할 경우에 변수의 내용이 나중에 선언한 것으로 변경되지 않는다.
    • 전역 변수를 동적 변수, 특별 변수라 부르기도 한다.
  • 전역 함수
    • 커먼 리스프에서 함수는 아래와 같이 명령어 defun으로 만든다.
      {{{(defun function_name (arguments)
      ...)}}}
    • 커먼 리스프에서는 다른 언어에서와 같이 return이라는 키워드를 쓰지 않는다. 함수에 적은 표현식의 마지막 평가 결과가 알아서 리턴된다.
  • 지역 변수
    • 커먼 리스프에서는 다음과 같이 명령어 let으로 지역 변수를 선언한다.
      {{{(let (variable declarations)
      ...body...)}}}
  • 지역 함수
    • 커먼 리스프에서 지역 함수를 선언할 때는 명령어 flet을 사용한다.
      {{{(flet ((function_name (arguments)

      • ...function body...))

      ...body...)
}}}
  • 재귀를 하려면 지역 함수 안에서 지역 함수를 호출해야 한다. 이때 flet으로는 그렇게 하지 못하고 명령어 labels을 써야 한다.
  • 함수 호출
    커먼 리스프에서 함수를 호출할 때 함수 이름을 괄호로 감싼다.
    {{{(foo)
}}}
  • 들여쓰기

    • 커먼 리스프에서 들여쓰기는 신경 쓰지 않아도 된다. 아무 곳에서나 개행해도 되고 몇 칸을 들여쓰기 해도 에러가 나지 않는다.
  • 리스트 함수
    • cons
    • car
    • cdr
    • list
  • 고차 함수
    • 커먼 리스프에서 함수를 인자로 넣을 때 연산자 function을 써야 한다.
      {{{(mapcar (function car) '((foo bar) (baz qux)))
}}}
  • 아래와 같이 연산자 function 대신 #'를 써도 된다.
    {{{(mapcar #'car '((foo bar) (baz qux)))
}}}
  • 출력 함수
    • print: 개행을 포함하여 문자열을 출력하는 함수이다.
    • prin1: 개행을 하지 않고 문자열을 출력하는 함수이다.
    • princ
  • 커먼 리스프에서 심볼 이름은 대소문자를 구분하지 않는다. 그런데 심볼 이름을 파이프로 감싸면 대소문자를 구분할 수 있다.(|CaseSensitiveSymbol|)

6. 코딩 컨벤션

  • 전역 변수 이름에 귀마개를 씌운다.(*foo*)
  • nil이나 참값을 리턴하는 함수 이름 뒤에 p를 붙인다.(oddp) 이런 함수를 predicates라고 한다.

7. 관련 문서

8. 외부 링크

분류