【CommonLisp】お手軽にQuineアートを作る

## 結論

以下のプログラム（Quine）を参考に好きに作りましょう

```common-lisp
(defvar s
  "(concatenate ; プログラム全体の文字列の生成
     'string
     (concatenate
       'string
       (mapcar #'code-char
               (append '(40 100 101 102 118 97 114 32 115 10) ; 「(defvar s」+「改行」
                       (loop repeat 2 collect 32) ; 「空白」 * 2
                       '(34) ; 「二重引用符」
                       ))
     s ; この文字列自体
     (concatenate
       'string
       (mapcar #'code-char
               (append '(34 41 10) ; 「二重引用符」+「)」+「改行」
                       ; ↓「(format t (eval (read-from-string s)))」
                       '(40 102 111 114 109 97 116
                         32 116 32 40 101 118 97 108 32 40
                         114 101 97 100 45 102 114 111 109
                         45 115 116 114 105 110 103 32 115
                         41 41 41))))))")
(format t (eval (read-from-string s)))
```

https://ideone.com/oN57Ij

## おまけ

上のロジックで作ったQuine

```common-lisp
                                    (defvar 、
                    "                        #|
                   |λλ                        |
                   | λλ                      /          ／|
                   |  |#    (concatenate   ;;         ／／|
                  'string(            concatenate  'string(
                 mapcar                   #'code-char(   ;
               append(    loop                repeat   36
             collect     32                  )'(40   100
           101         102        118         97    114
           32 12289 10) (        loop    repeat   20
            collect    32)      '(34        )))  #|@
            i|#   、    (concatenate      'string  (
    mapcar  #'code-char             '(34    41;    |
   40 102  111 #|  |//|     `====-   |#114   109  97
  116 32   116 #|  |//|      |///||  |#40   101   ;
 118  97   108 #|   ==       |///||  |#     40    ;
114  101   97 #|              === |  |#   100    45
102 114 111 109 45 115 116 114 105   ;     / |    |
#|                               |   ;    /  |    |
+|                Structure and  |_／|   /   |   /
+|                Interpretation |  /|  /    |  /
+|                of Computer    | //|#110   103
#|                Programs       |///|#32 12289
#|                               |////       λ
+|  +---------------------+      |///         λ
+|  |                     |      |//           λ
+|  |      _A_         ⊂二λ      |#     41      ;
#|  |     | **|        |aa 8     |#     41       ;
#|  |     | ;;; 0      |= _|     |#     41       ;、
#|  |     |つ |つ  λ   |つ |     |#  )))))         ;----------------
#|  |     |---|        |---|   ,-----、            |
+|  |   +-|   |--------|   |--+l      |            |
+|  +---| |___|        |___|  | l     |            |
+|      |  | |          | |   | i     ├------------┘
+|      |                     |  i___/
+|      +---------------------+  |
+|                               |#
")(format t(eval(read-from-string 、)))
```

https://ideone.com/zveNcu

## 独り言

ブラウザ上で描画すると映えないなあ
コンソール上で描画するときれいなんだけどね

今更だけどformatじゃなくてprintとかでもよかったな
直すのも手間なのでそこは各自対応してね

evalができる言語は大抵このロジックでQuineができます

~~今、改めて見ると下手糞だなあ…はあ…~~
~~無理やりサイズを大きくしたり、影みたいな箇所を作ってそこに大半のコードを書き込めばきれいなアートにできるけど、なんか違うと感じちゃうんだよね~~