[Rejected] PEP 313 - Adding Roman Numeral Literals to Python

원문 링크: PEP 313 - Adding Roman Numeral Literals to Python

상태: Rejected 유형: Standards Track 작성일: 01-Apr-2003

PEP 313 – Python에 로마 숫자 리터럴 추가 제안

  • 작성자: Mike Meyer
  • 상태: Rejected (거부됨)
  • 유형: Standards Track (표준 추적)
  • 생성일: 2003년 4월 1일
  • Python 버전: 2.4

요약 (Abstract)

이 PEP (PEP CCCXIII로도 알려짐)는 로마 숫자를 리터럴 타입으로 추가할 것을 제안합니다. 또한, 객체를 정수로 변환한 다음, 해당 정수를 로마 숫자 리터럴에 해당하는 문자열로 변환하는 새로운 내장 함수 “roman“을 제안합니다.

BDFL 선언 (BDFL Pronouncement)

이 PEP는 거부되었습니다. 대부분의 Python 사용자들은 이 기능이 있으면 좋겠다고 여겼지만, 커뮤니티는 숫자 9를 현대적인 형태인 IX로 표현할지, 아니면 고전적인 형태인 VIIII로 표현할지에 대해 합의에 도달하지 못했습니다. 마찬가지로, 1990년을 MXM 또는 MCMXC 중 어느 것이 잘 구성된 표현으로 간주할지에 대해서도 합의가 이루어지지 않았습니다. 일부 소수의 사용자들은 (i) 파워포인트 슬라이드, (ii) 학술 작업, (iii) Perl 문서에 사용하기 위해 소문자 로마 숫자 지원을 요청하기도 했습니다.

도입 배경 (Rationale)

로마 숫자는 여러 분야에서 사용되며, 이를 Python에 리터럴로 추가하면 해당 분야에서의 계산을 더 쉽게 만들 수 있습니다. 예를 들어, 슈퍼볼은 로마 숫자로 세어지며, 많은 오래된 영화의 저작권 날짜는 로마 숫자로 표기됩니다. 또한, LISP는 로마 숫자 리터럴 패키지를 제공하므로, Python에 로마 숫자를 추가하는 것은 comp.lang.python에서 가끔 보이는 LISP에 대한 선망을 완화하는 데 도움이 될 것입니다. 게다가, 작성자는 이것이 그의 이름을 PEP에 올리는 가장 쉬운 방법이라고 생각했습니다. (참고: PEP 313은 4월 1일에 생성된 문서로, 내용상의 유머와 ‘Rejected’ 상태를 고려할 때 만우절 농담 PEP일 가능성이 높습니다.)

로마 숫자 리터럴 문법 (Syntax for Roman literals)

로마 숫자 리터럴은 문자 M, D, C, L, X, V, I로만 구성되어야 합니다. 이들은 대문자여야 하며, 다음 규칙에 따라 정수를 나타냅니다.

  • 아래에 언급된 예외를 제외하고, M, D, C, L, X, V, I 순서로 나타나야 합니다.
  • 각 문자의 출현은 각각 1000, 500, 100, 50, 10, 5, 1을 리터럴 값에 더합니다.
  • 주어진 리터럴에는 D, V 또는 L이 하나만 나타날 수 있습니다.
  • 주어진 리터럴에는 I, X, C가 연속적으로 최대 세 개까지 나타날 수 있습니다.
  • 단일 I는 단일 V 바로 왼쪽에 나타날 수 있으며, 이후 I는 없어야 하고, 리터럴 값에 4를 더합니다.
  • 단일 I는 마찬가지로 마지막 X 앞에 나타날 수 있으며, 이후 I나 V는 없어야 하고, 값에 9를 더합니다.
  • X가 L과 C에 대해 가지는 관계는 I가 V와 X에 대해 가지는 관계와 같으며, 각각 40과 90의 값을 가집니다.
  • C가 D와 M에 대해 가지는 관계는 I가 V와 X에 대해 가지는 관계와 같으며, 각각 400과 900의 값을 가집니다.

M, D, C, L, X, V, I 문자로만 구성되었지만 이 형식을 따르지 않는 모든 리터럴은 구문 오류(syntax error)를 발생시킬 것입니다. 이는 “명시적인 것이 암시적인 것보다 낫다”는 원칙에 따릅니다.

내장 함수 “roman” (Built-In “roman” Function)

새로운 내장 함수 “roman“은 정수를 로마 숫자 리터럴로 변환하는 데 도움을 줄 것입니다. 이 함수는 단일 객체를 인수로 받아, 동일한 값을 가진 리터럴을 포함하는 문자열을 반환합니다. 인수가 정수 또는 유리수(PEP 239 참조)가 아닌 경우, 기존 내장 함수 “int“를 통해 값을 얻습니다. 이 경우 객체가 float인 경우 정보 손실이 발생할 수 있습니다. 객체가 유리수인 경우, 결과는 문자열 내의 정수가 로마 숫자 리터럴인 유리수 리터럴(PEP 240 참조)로 포맷될 것입니다.

호환성 문제 (Compatibility Issues)

이 제안으로 인해 새로운 키워드는 도입되지 않습니다. 모든 문자가 대문자이며 M, D, C, L, X, V, I 문자만 포함하는 변수 이름을 사용하는 프로그램은 새로운 리터럴의 영향을 받게 됩니다. 이러한 프로그램은 해당 변수가 할당될 때 구문 오류를 일으키거나, 표현식에서 해당 변수가 참조될 때 구문 오류 또는 미묘한 버그를 일으킬 것입니다. 이러한 변수 이름은 PEP 8을 위반하므로 코드는 이미 잘못된 상태였지만, 예외를 발생시키지 않았을 뿐입니다. 이 제안은 언어의 이러한 간과를 수정합니다.

이 문서는 퍼블릭 도메인에 공개되었습니다.


⚠️ 알림: 이 문서는 AI를 활용하여 번역되었으며, 기술적 정확성을 보장하지 않습니다. 정확한 내용은 반드시 원문을 확인하시기 바랍니다.

Comments