Lisp'de golf için ipuçları


9

Lisp'te (herhangi bir lehçe) golf yapmak için hangi genel ipuçları var? Lütfen cevap başına bir ipucu gönderin ve yalnızca Lisp lehçesine özgü yanıtlar gönderin (örneğin, "yorumları kaldır" bir yanıt değildir).

Lütfen ipucunuz için geçerli olan Lisp lehçesini gönderin.



1
Bunların Scheme ve Racket'teki golf ipuçlarından farklı olacağını düşünüyor musunuz ?
Alex A.

1
Golf keyfiniz için Lisp'in daha küçük, soyulmuş bir versiyonu olan tinylisp kullanmanızı tavsiye ederim.
ckjbgames

Yanıtlar:


4

Boşluğu en aza indirmek için işlev parametreleri sipariş etme

Onun yerine

(defun f(a b)(...))
...
(f x(1+ y))

gibi bir şey dene

(defun f(b a)(...))
...
(f(1+ y)x)

1

Büyük harflerden oluşan dizeleri yazdırma atomları ile basma

princCommon Lisp fonksiyon kısadır ve kaçış characers olmadan nesneleri yazdırır. Sinaxa sahip Common Lisp sembollerini yazdırırsanız 'symbol-name, bu, yazdırmak istediğiniz şey için tırnak işareti kullanmanıza gerek kalmaz ve beyaz alana da kaydedebilir. Sembolleri yazdırırken büyük harflerle yazıldığını unutmayın. Ayrıca, bir satırsonu veya boşluk eklemez, bu nedenle birleştirme işlemine ihtiyacınız yoktur.

Örneğin,

(princ'hai)

yazdıracaktır HAI.

Ve

(princ'hai)(princ(read))

yazdırır HAI, giriş ister ve yeniden yazdırır, örneğin, merhaba yazarsanız, sonuç

HAIhellohello


1

Steroidlerde olduğu gibi loopve kullanın . yineleme ve koşulları, ayrıca romen rakamlarını, İngilizce numaraları ve İngilizce çoğulları içerir. Çok, çok çirkin ve çok kompakt.formatprintfformat


1

Koşullu Çıktı

GNU Ortak Lisp

~v^

Yukarı ve dışarı yönergesi ~^en sık geçen Liste öğesinden sonra sona erdirmek için operasyon biçimlendirme liste halinde kullanılır. Bununla birlikte, vbir bağımsız değişkeni tüketmek için bir değiştiriciyle de kullanılabilir , bu durumda bu bağımsız değişken sıfır ise sona erer. Bu, tarafından üretilen sıfır ile başa çıkmak için özellikle yararlıdır dotimes.

(loop as n from 1 to 10 do(format t"~d~%"n))

(dotimes(n 11)(if(> n 0)(format t"~d~%"n)))

(dotimes(n 11)(format t"~v^~d~%"n n))

format(condition)

İlk bağımsız değişkeni formatbiri olabilir t, nildiğer adıyla (), veya bir akım üretilir. Tasarı kabul edildiği takdirde t, bu çıktı olacak stdouteğer, nilo dize olarak biçimlendirilmiş çıktı dönecektir. Bu koşullu çıktı kullanılabilir. Yukarıdaki örnek eşit derecede kısa yazılabilir:

(dotimes(n 11)(format(> n 0)"~d~%"n))

Bir değer çıkarıldıysa, dönüş değeri olacaktır nil. Bu nedenle, bir dodöngü için sonlandırma koşulu olarak da kullanılabilir :

(do((n 11))((<(decf n)1))(format t"~d~%"n))

(do((n 11))((format(>(decf n)0)"~d~%"n)))

~[...~]

Koşullu biçimlendirici bir bağımsız değişken kullanır ve listeden dizine göre bir biçimlendirme dizesi seçer. Yaygın bir kullanım durumu, ~:;sıfır değil sıfır arasında seçim yapmak için varsayılan biçimlendiricidir .

(dotimes(n 11)(format t"~v^~[~r~:;~d~]~%"n(mod n 3)n))

Koşullu biçimlendiriciler de iç içe yerleştirilebilir, bu durumda her biri sırayla bir argüman tüketir.


~&

Yukarıdaki örneklerin her birinde, ~%bir satırsonu yayınlamak için kullanılır. Çoğu durumda, bunun yerine gerçek bir satırsonu kullanılabilir. Başka bir seçenek de ~&, yalnızca çıkış imleci bir satırın başında değilse, yani a fresh-line.

Her ikisi de ~%ve ~&bir vdeğiştirici ile veya sabit olarak bir argüman alabilir ve çok sayıda yeni satır üretecektir. İkisi de olumsuz bir argümanı memnuniyetle kabul edeceklerdir, bu durumda hiçbir şey yaymazlar.


Dış Referanslar

Pratik Ortak Lisp
18. Birkaç FORMAT Tarif

Common Lisp the Language, 2. Baskı
22.3.3. Karakter Akışlarına Biçimlendirilmiş Çıktı

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.