목록에 char을 삽입하고 싶습니다. 그러나이 문자를 목록의 마지막 기호와 병합하고 싶습니다. 추가와 단점으로 결과는 항상 두 개의 다른 기호입니다. 음, 하나의 병합 된 심볼을 내 결과로 만들고 싶습니다. 당신이 원하는 경우,기호를 공통 lisp로 병합
가 (XXXX 'a '5) ====> (a 5)
목록에 char을 삽입하고 싶습니다. 그러나이 문자를 목록의 마지막 기호와 병합하고 싶습니다. 추가와 단점으로 결과는 항상 두 개의 다른 기호입니다. 음, 하나의 병합 된 심볼을 내 결과로 만들고 싶습니다. 당신이 원하는 경우,기호를 공통 lisp로 병합
가 (XXXX 'a '5) ====> (a 5)
물어 질문에 대한 답변이 오
(defun concatenate-objects-to-symbol (&rest objects)
(intern (apply #'concatenate 'string (mapcar #'princ-to-string objects))))
(concatenate-objects 'a 'b) ==> ab
입니다 :
는예 : 내가 좋아하는 것이 무엇
(XXXX 'a '5) ====> (a5)
대신에,이하기 a 목록 결과 :
(defun xxxx (s1 s2) (list (concatenate-objects-to-symbol s1 s2)))
그러나, 나는 당신이 실제로 물어을 원하는이 하지 질문입니다 확신합니다.
* (symbol-append 'a 'b 'c)
ABC
* (apply #'symbol-append '(a b c))
ABC
당신이 당신의 인수를 기대하는 경우로 사용 후
(defun symbol-append (&rest symbols)
(intern (apply #'concatenate 'string
(mapcar #'symbol-name symbols))))
과 :
프로그램 새 심볼 만들기뭔가 초보자 일을해야되지 ...
이 정의 기호 외에 물건을 포함하려면 을 다음으로 대체하십시오.
(lambda (x)
(typecase x ...))
또는 기존 CL 기능 (내가 잊어 버린 :()은 무엇이든 문자열로 나타냅니다.)
함수'string'은 어떤 문자열 지정자를 string으로 표현하지만, 말하자면 경로명을 말하지 않는다. – sds
Lisp에서 "심볼을 병합"할 수 없습니다.
우선 5
은 기호가 아니며 숫자입니다. "5"
이라는 심볼을 원하면 |5|
과 같이 입력해야합니다 (예 :).
기호가 A
이고 기호가 |5|
인 경우 기호가 A5
인 경우 기호가 병합되지 않았습니다. 그것은 새로운 기호를 만들었습니다. 그 이름은 그 입력 기호들의 이름들의 연결입니다.
제대로 설계된 Lisp 프로그램은 심볼의 이름에 거의 의존하지 않습니다. 고유 한 엔티티 인 기호에 의존합니다.
기호를 사용하여 사물을 식별하고 5
및 A
이 일부 엔티티를 식별하는 경우 가장 좋은 대답은 반드시 적어도 두 기호의 매시업 인 새로운 기호를 만드는 것이 아닙니다. . 예를 들어, 더 좋은 디자인은 그 이름이 어떤 식 으로든 다각적이거나 복합적이라는 것을 받아 들일 수 있습니다. 아마도 목록 (A 5)
을 이름으로 사용할 수 있습니다.
일반적인 Lisp 함수 자체는 복합체 이름을 가질 수 있습니다. 예를 들어 (setf foo)
은 함수 이름입니다. 목록과 같은 집계는 이름이 될 수 있습니다.
기계가 런타임시 고유 한 기호를 생성하기 만하면 gensym
기능을 사용해보십시오. 당신은 그것을 자신의 접두사를 전달할 수 있습니다
(gensym "FOO") -> #:FOO0042
은 물론, 접두사 일부 기존 심볼의 이름이 될 수 있습니다, symbol-name
를 통해 꺼냈다. 기호 #:FOO0042
은 0042
때문에 고유하지 않지만 주소 공간에 새로 할당 된 개체이기 때문에 고유하지 않습니다. #:
은 패키지에 포함되어 있지 않음을 의미합니다. 기호의 이름은 FOO0042
입니다. 당신은 여전히 정말 원하는 경우
, 입력 개체의 무리의 인쇄 된 표현을 가지고 상징으로 바꿀 수있는 간단한 방법이 있습니다 :
(defun mashup-symbol (&rest objects)
(intern (format nil "~{~a~}" objects)))
예 :
(mashup-symbol 1 2 3) -> |123|
(mashup-symbol '(a b) 'c 3) -> |(A B)C3|
Ah yes'format' - 프로그래밍 언어의 프로그래밍 언어 ... – GoZoner
로 심볼 이름으로 해석되는 Lisp 리스너에 토큰을 입력하자마자 기호를 만들었습니다. – Kaz
공정하지 않다! 내 대답을 복사 했어 !! (define xxxx (s1 s2) ...) –
GoZoner