são listas ligadas, limitadas por parênteses (S-Expression) O código é composto de, basicamente, uma lista de listas Agora você entende o porquê daquele monte de parenteses ( o p e r a d o r v a l o r v a l o r v a l o r . . . v a l o r ) ( o p e r a d o r v a l o r ( o p e r a d o r v a l o r v a l o r . . . v a l o r ) )
+ 2 + 3 + 4 + 5 + 6 1 + ( 2 * 3 ) + ( 4 * 5 ) [ 1 , 2 , 3 , 4 , 5 , 6 ] . r e d u c e ( : + ) ; L I S P ( + 1 2 3 4 5 6 ) ( + 1 ( * 2 3 ) ( * 4 5 ) ) ; m a i s l e g í v e l ( + 1 ( * 2 3 ) ( * 4 5 ) )
o j u r e ( d e f n s o m a [ x y ] ( + x y ) ) ( d e f n m e d i a [ x y ] ( / ( + x y ) 2 ) ) ( d e f n c a l c u l a r [ o p e r a d o r v a l o r 1 v a l o r 2 ] ( o p e r a d o r v a l o r 1 v a l o r 2 ) ) ( c a l c u l a r s o m a 3 5 ) ; r e s u l t a d o : 8 ( c a l c u l a r m e d i a 3 5 ) ; r e s u l t a d o : 4
p t f u n c t i o n s o m a ( x , y ) { r e t u r n x + y ; } f u n c t i o n m e d i a ( x , y ) { r e t u r n ( x + y ) / 2 ; } f u n c t i o n c a l c u l a r ( o p e r a d o r , v a l o r 1 , v a l o r 2 ) { r e t u r n o p e r a d o r ( v a l o r 1 , v a l o r 2 ) ; } c a l c u l a r ( s o m a , 3 , 5 ) / / r e s u l t a d o : 8 c a l c u l a r ( m e d i a , 3 , 5 ) / / r e s u l t a d o : 4
d e f n u n l e s s [ c o n d i t i o n f a l s y t r u e y ] ( i f c o n d i t i o n f a l s y t r u e y ) ) ( u n l e s s a u t h o r i z e d ( s h o w - a l e r t " A c e s s o n e g a d o " ) ( d r o p - d a t a b a s e ) ) Não rolou. O que aconteceu?
d e f m a c r o u n l e s s [ c o n d i t i o n t r u e y f a l s y ] ` ( i f ~ c o n d i t i o n ~ f a l s y ~ t r u e y ) ) ( u n l e s s a u t h o r i z e d ( s h o w - a l e r t " A c e s s o n e g a d o " ) ( d r o p - d a t a b a s e ) ) ( m a c r o e x p a n d ' ( u n l e s s f a l s e " E h t r u e " " E h f a l s e " ) ) ; ( i f f a l s e " E h f a l s e " " E h t r u e " ) Código é passado como parâmetro e avaliado condicionalmente
d e s c r i b e " N o r t h " ( c o n t e x t " u s i n g c o n t e x t " ( i t " s h o u l d t e s t s i m p l e a s s e r t i o n s " ( s h o u l d ( = 1 1 ) b e - t r u e ) ( s h o u l d ( = 1 1 ) b e - t r u e ) ( s h o u l d ( = 1 0 ) b e - f a l s e ) ( s h o u l d ( + 1 1 ) b e - e q u a l s 2 ) ( s h o u l d ( + 1 1 ) b e - n o t - e q u a l s 1 ) ) ) )
em blocos pequenos e reutilizáveis Reduzir as partes móveis e evitar estados globais Entender melhor como funciona um compilador/interpretador E de repente vai ter vontade de criar sua própria linguagem