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. ( letbunu yaptığınızda sorunlarla karşılaşabilirsiniz)
Ama letbö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 ... invb
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,