Apa tips umum ini untuk bermain golf di Lisp (dialek apa saja)? Silakan kirim satu tip per jawaban, dan hanya jawaban yang spesifik untuk dialek Lisp (mis. "Hapus komentar" bukan jawaban).
Silakan kirim dialek Lisp yang sesuai dengan tip Anda.
String cetak yang terdiri dari huruf kapital melalui atom cetak
The princfungsi dalam Common Lisp pendek, dan akan mencetak benda-benda tanpa characers melarikan diri. Jika Anda mencetak simbol Common Lisp, yang memiliki synax 'symbol-name, ini akan menyelamatkan Anda dari perlu tanda kutip di sekitar apa yang ingin Anda cetak, dan juga dapat menghemat di spasi putih. Perhatikan bahwa saat mencetak simbol, mereka akan berhuruf besar. Juga, itu tidak menambahkan baris baru atau spasi, jadi Anda tidak perlu penggabungan.
Sebagai contoh,
(princ'hai)
akan dicetak HAI .
Dan
(princ'hai)(princ(read))
akan mencetak HAI, meminta input, dan mencetaknya kembali, misalnya jika Anda mengetik halo, hasilnya adalah
Gunakan loopdan format, yang seperti printfpada steroid. formattermasuk iterasi dan ketentuan, serta angka romawi, angka bahasa Inggris dan bentuk jamak bahasa Inggris. Ini sangat, sangat jelek, dan sangat kompak.
The up-dan-out direktif ~^ini paling sering digunakan dalam daftar format operasi untuk mengakhiri setelah daftar item terakhir. Namun, itu juga dapat digunakan dengan vpengubah untuk mengkonsumsi argumen, dalam hal ini berakhir jika argumen itu nol. Ini sangat berguna untuk menangani nol yang dihasilkan oleh dotimes.
(loop as n from 1 to 10do(formatt"~d~%"n))(dotimes(n 11)(if(> n 0)(formatt"~d~%"n)))(dotimes(n 11)(formatt"~v^~d~%"n n))
format(condition)
Argumen pertama untuk formatdapat berupa salah satu t, nilalias (), atau aliran. Jika dilewati t, itu akan menjadi output stdout, jika nilakan mengembalikan output yang diformat sebagai string. Ini dapat digunakan keluaran bersyarat. Contoh di atas dapat ditulis sama pendeknya dengan:
(dotimes(n 11)(format(> n 0)"~d~%"n))
Jika nilai adalah output, nilai pengembaliannya akan nil. Karena itu, ini juga dapat digunakan sebagai kondisi terminating untuk doloop:
Pemformat bersyarat menggunakan argumen, dan memilih string pemformatan dari daftar dengan indeks. Kasus penggunaan umum adalah dengan formatter default ~:;untuk memilih antara nol dan bukan nol.
(dotimes(n 11)(formatt"~v^~[~r~:;~d~]~%"n(mod n 3)n))
Formatters bersyarat juga dapat disarangkan, dalam hal ini masing-masing akan mengkonsumsi argumen pada gilirannya.
~&
Dalam setiap contoh di atas, ~%digunakan untuk memancarkan baris baru. Dalam kebanyakan kasus, ini dapat digantikan oleh baris baru literal. Pilihan lain adalah menggunakan ~&, yang akan memancarkan baris baru jika dan hanya jika kursor output tidak pada awal baris, aliasfresh-line .
Keduanya ~%dan ~&juga dapat mengambil argumen, dengan vpengubah atau sebagai konstanta, dan akan menghasilkan banyak baris baru. Mereka juga akan dengan senang hati menerima argumen negatif, dalam hal ini mereka tidak mengeluarkan apa-apa.
Jawaban:
Memesan parameter fungsi untuk meminimalkan spasi putih
Dari pada
coba sesuatu seperti
sumber
String cetak yang terdiri dari huruf kapital melalui atom cetak
The
princ
fungsi dalam Common Lisp pendek, dan akan mencetak benda-benda tanpa characers melarikan diri. Jika Anda mencetak simbol Common Lisp, yang memiliki synax'symbol-name
, ini akan menyelamatkan Anda dari perlu tanda kutip di sekitar apa yang ingin Anda cetak, dan juga dapat menghemat di spasi putih. Perhatikan bahwa saat mencetak simbol, mereka akan berhuruf besar. Juga, itu tidak menambahkan baris baru atau spasi, jadi Anda tidak perlu penggabungan.Sebagai contoh,
akan dicetak
HAI
.Dan
akan mencetak
HAI
, meminta input, dan mencetaknya kembali, misalnya jika Anda mengetik halo, hasilnya adalahsumber
Gunakan
1+
dan1-
untuk kenaikan dan penurunanAlih-alih
(+ a 1)
atau(- b 1)
coba(1+ a)
atau(1- b)
.sumber
1+
diuraikan sebagai dua token,1
dan+
? Saya pikir itu+1
.1+
dan1-
diurai sebagai token tunggal Common Lisp HyperSpec Function 1+, 1-Gunakan
loop
danformat
, yang sepertiprintf
pada steroid.format
termasuk iterasi dan ketentuan, serta angka romawi, angka bahasa Inggris dan bentuk jamak bahasa Inggris. Ini sangat, sangat jelek, dan sangat kompak.sumber
Output Bersyarat
GNU Common Lisp
~v^
The up-dan-out direktif
~^
ini paling sering digunakan dalam daftar format operasi untuk mengakhiri setelah daftar item terakhir. Namun, itu juga dapat digunakan denganv
pengubah untuk mengkonsumsi argumen, dalam hal ini berakhir jika argumen itu nol. Ini sangat berguna untuk menangani nol yang dihasilkan olehdotimes
.format(condition)
Argumen pertama untuk
format
dapat berupa salah satut
,nil
alias()
, atau aliran. Jika dilewatit
, itu akan menjadi outputstdout
, jikanil
akan mengembalikan output yang diformat sebagai string. Ini dapat digunakan keluaran bersyarat. Contoh di atas dapat ditulis sama pendeknya dengan:Jika nilai adalah output, nilai pengembaliannya akan
nil
. Karena itu, ini juga dapat digunakan sebagai kondisi terminating untukdo
loop:~[...~]
Pemformat bersyarat menggunakan argumen, dan memilih string pemformatan dari daftar dengan indeks. Kasus penggunaan umum adalah dengan formatter default
~:;
untuk memilih antara nol dan bukan nol.Formatters bersyarat juga dapat disarangkan, dalam hal ini masing-masing akan mengkonsumsi argumen pada gilirannya.
~&
Dalam setiap contoh di atas,
~%
digunakan untuk memancarkan baris baru. Dalam kebanyakan kasus, ini dapat digantikan oleh baris baru literal. Pilihan lain adalah menggunakan~&
, yang akan memancarkan baris baru jika dan hanya jika kursor output tidak pada awal baris, aliasfresh-line
.Keduanya
~%
dan~&
juga dapat mengambil argumen, denganv
pengubah atau sebagai konstanta, dan akan menghasilkan banyak baris baru. Mereka juga akan dengan senang hati menerima argumen negatif, dalam hal ini mereka tidak mengeluarkan apa-apa.Referensi Eksternal
Praktis Masalah Umum
18. Beberapa Resep FORMAT
Umum Gangguan Bahasa, Edisi ke-2
22.3.3. Output Terformat ke Streaming Karakter
sumber