2010-07-01 4 views
1

16 진수를 16 진수로 변환하려고합니다.16 진수를 16 진수로 변환하여 일반적인 lisp로 표시

예를 들면 다음과 같습니다.

CL-USER> (foo 0D) 
#x0D 

매크로 기능을 사용해야합니까?

+0

매크로 기능이란 무엇입니까? –

+0

참조 http://stackoverflow.com/questions/1521509/common-lisp-integer-to-hex-conversion –

+0

매크로 함수는 매크로라고 말합니다. (defmacro) – jeon

답변

3

0D는 기호입니다 (기본값). SYMBOL-NAME으로 이름을 문자열로 가져옵니다. PARSE-INTEGER를 RADIX 16과 함께 사용하여 번호를 가져옵니다.

아무런 이유가없는 경우 16 진수를 기호로 나타내면됩니다.

0

숫자를 16 진수 문자열로 지정 하시겠습니까? 그렇다면 다음과 같은 것을 원할 것입니다 : (format nil "~x" #x0D)

+0

값을 반환하고 싶습니다. :-) – jeon

+0

저는 ' 당신이 찾고있는 것을 이해하지 못합니다. 좀 더 명확하게하려고 할 수 있습니까? – Gabe

+0

죄송합니다 ~. 나는 당신의 대답을 오해했습니다. Gabe 대단히 감사합니다. – jeon

0

귀하의 질문에 말한 것처럼 말이되지 않습니다. "16 진수"와 같은 것은 없습니다. "16 진수"는 숫자 프리젠 테이션 시스템의 이름입니다. 예를 들어, Rainer가 말했듯이, 입력이 심볼 인 것처럼 보이지만 모든 "16 진수"가 기호는 아닙니다. 아마도 (foo 10)의 결과가 # x10이 되길 원하고, 여기서 입력은 숫자입니다. 따라서 입력이 Lisp 리더에 의해 (기본 -10) 숫자로 해석된다면 다시 읽은 숫자 16으로 변환해야합니다.

또 다른 점은 0D를 이해하면 기호로 사용하면 (foo 0D) UNBOUND-VARIABLE 오류가 발생합니다. foo에 0D를 입력하려면 (foo '0D)를 써야합니다.

출력 측면에서 "#x ..."로 인쇄되는 네이티브 Lisp 객체가 있다고 생각하지 않습니다. 16 진수를 인쇄하려면 인쇄베이스을 16에 바인드하지만 그 앞에 sharpsign-x가 보이지 않습니다.

이는 다소 다른 방식으로 문제를 제안합니다.

cl-user(162): (foo 38) 
#x38 
cl-user(163): (foo '0D) 
#x0D 

나는 이것이 재미있는 느낌이 :

(defstruct (pseudo-hex (:print-object pseudo-hex-print)) 
    thing) 

(defun pseudo-hex-print (h srm) 
    (format srm "#x~a" (pseudo-hex-thing h))) 

(defun foo (x) 
    (make-pseudo-hex :thing x)) 

이제 우리는 다음을 얻을 : 우리는 인쇄가 #x를 시작으로, 그리고 foo는 그러한 객체를 생성 한 수행하는 새로운 데이터 유형을 정의 라파엘이 묻고있는 것이 아닙니다!

관련 문제