Saya memiliki string format dengan 11 "%s", misalnya

"%s %s %s %s %s %s %s %s %s %s %s "

Dan ingin menerapkan format ke string ini dan hasil (syntax-ppss), yang mungkin terlihat seperti ini, mis. campuran angka, nil, t, sublists, yaitu. berbagai objek. Format "%s" harus dapat mencetak objek apa pun, per dokumen

(3 1163 1171 nil nil nil 0 nil nil (1144 1153 1163) nil)

Saya pikir ini akan mudah, tetapi satu-satunya hal yang dapat saya lakukan adalah mengutip setiap elemen daftar lalu eval seperti,

(eval
 `(format "%s %s %s %s %s %s %s %s %s %s %s "
          ,@(mapcar (lambda (it) (list 'quote it)) (syntax-ppss))))

Ini tampaknya terlalu rumit, saya berharap solusi yang lebih sederhana, jika ada?

0
Rorschach 7 Maret 2020, 15:02

1 menjawab

Jawaban Terbaik

Alih-alih memformat seluruh hasil daftar syntax-ppss sekaligus, Anda dapat menggunakan mapconcat untuk memformat setiap elemen daftar dan menggabungkan string yang diformat dengan spasi pemisah:

(mapconcat (lambda (it) (format "%s" it)) (syntax-ppss) " ")

Perbedaan utama antara ini dan solusi asli Anda adalah tidak ada spasi tambahan dalam hasil ini. Jika Anda ingin menyimpannya, gunakan pemisah kosong dan letakkan spasi di string format sebagai gantinya:

(mapconcat (lambda (it) (format "%s " it)) (syntax-ppss) "")

EDIT: Jika Anda lebih memilih untuk mempertahankan satu panggilan format, alternatif lain adalah dengan apply daftar hasil syntax-ppss menjadi argumen untuk format:

(apply 'format "%s %s %s %s %s %s %s %s %s %s %s " (syntax-ppss))
1
Steve Vinoski 7 Maret 2020, 13:56