K düğümlerinizi tanıyın
İşlevsel dillerdeki en güçlü yapılardan bazıları (golf için) let ... in ...
.
Temiz tabii ki, bu, ve daha iyi bir şey - #
.
Düğüm nedir?
Clean'ler #
ve her yerde bulunan |
(desen koruması) her ikisi de 'düğüm ifadeleri' olarak bilinir.
Dikkat çekici bir şekilde, Temiz'de (bu gerçekten iyi!) Zorunlu olarak programlamanıza izin verir .
#
(Let-öncesi):
Her ikisi de dize olarak verilen bir tam sayının değerlerini, karakterlerinin toplamıyla çarpımını hesaplar
f s=let i=toInt s;n=sum[toInt c\\c<-:s]in n*i
f s#i=toInt s
#s=sum[toInt c\\c<-:s]
=s*i
Sürümünün nasıl #
daha kısa olduğuna ve nasıl yeniden tanımlayabileceğimize dikkat edin s
. Bu, bir değişkenin aldığımızda sahip olduğu değere ihtiyacımız olmadığında kullanışlıdır, bu nedenle adı tekrar kullanabiliriz. ( let
bunu yaptığınızda sorunlarla karşılaşabilirsiniz)
Ama let
böyle bir şeye ihtiyacınız olduğunda kullanmak daha kolayflip f = let g x y = f y x in g
|
(Pattern guard):
Clean'in desen koruyucusu diğer birçok işlevsel dilde olduğu gibi kullanılabilir - ancak bir zorunluluk gibi de kullanılabilir if ... else ...
. Üçlü ifadenin daha kısa bir versiyonu.
Örneğin, bunların hepsi bir tamsayının işaretini döndürür:
s n|n<>0|n>0=1= -1
=0
s n=if(n<>0)if(n>0)1(-1)0
s n|n>0=1|n<0= -1=0
Tabii ki, muhafızı daha geleneksel kullanan en kısa olanıdır, ancak birincisi onları yuvalayabileceğinizi gösterir (ancak düzen kuralında aynı satırda sadece iki koşulsuz dönüş cümlesi görünebilir) ve ikincisi, birincisi mantıklı.
Bir not:
Bu ifadeleri temelde her yerde kullanabilirsiniz. Lambdas yılında case ... of
, let ... in
vb
import StdEnv
+a and b
(21 bayt)%[a:r]|a= %r=a;%_=True
(22 bayt) ' dan küçük değil mi? Yoksaimport StdEnv
+a=True and b=True
(31 bayt) olur, bu durumda kesinlikle daha kısadır? (Clean,