まずは添削から。
- 本当にLispはカッコが多い? - 八発白中
それぞれの言語のプログラムを、以下のPerlワンライナーを使ってカッコを数えました。
perl -e '$_=join//,@ARGV;print s/[(){}]//g||0' `cat filename`
catいらないよね。
% cat fact.scm #!/usr/local/bin/gosh (use srfi-1) (define (fact n) (if (zero? n) 1 (* n (fact (- n 1))))) (define (main args) (for-each (lambda (i) (print i "! = " (fact i))) (iota (if (null? (cdr args)) 1 (string->number (cadr args))) 1))) % perl -nle '$a+=tr/(){}//}{print$a' fact.scm 42
というわけで本題。括弧は{}にもう一対減らせる。
#!/usr/bin/perl -l
use strict;
use warnings;
sub fact{
my $r = 1;
$r *= $_ for 1..shift;
$r;
}
print "$_! = ", fact $_ for 1..shift||20;
そこまでくれば、{}をなくすのは簡単だ。
#!/usr/bin/perl -l use strict; use warnings; use subs "fact"; *fact = eval<<"fact"; sub \173 my \$r = 1; \$r *= \$_ for 1..shift; \$r; \175 fact print "$_! = ", fact $_ for 1..shift||20;
とはいってもevalを使うのは反則じみている。こうするのはどうか。
#!/usr/bin/perl -l $fact=1;print"$_! = ",$fact*=$_ for 1..shift||20;
んまてよ。Brainf?ckなら()も{}もないよな。
+++++++++++++++++++++++++++++++++ >++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++ >++++++++++ >+++++++ > >+ << [ >++++++++++++++++++++++++++++++++++++++++++++++++. ------------------------------------------------ <<<<.-.>.<.+ >>>>> > >++++++++++ << [->+>-[>+>>]>[+[-<+>]>+>>]<<<<<<] >[<+>-] >[-] >> >++++++++++ < [->-[>+>>]>[+[-<+>]>+>>]<<<<<] >[-] >>[++++++++++++++++++++++++++++++++++++++++++++++++.[-]] <[++++++++++++++++++++++++++++++++++++++++++++++++.[-]] <<<++++++++++++++++++++++++++++++++++++++++++++++++.[-] <<<<<<. >>+ >[>>+<<-] >> [ <<<[>+>+<<-] >>[<<+>>-] >- ] <<<<- ]
逆に普通の文字が嫌いな方は、こちらをどうぞ。
#!/usr/bin/perl
$^_^='()+#=```{|?"?~+.&"=;-[+$*:!>%/)`"`<!(!|"?~`*(@<^*',$^_^='((((.:>"?"<.>`((.(;",.((^(+<+((/-;!*()!*(=>((-!^^',$^_^='$`>:(*,+**!(^?#;((*=`_>(+>(^`%!)`)=:.&.`~%*~|_-;~',$^_=''^'+@$@&'^'^.@%@'.'$^_^"";'.$^_^"",'!~'!~('('.('`_@^!@'^'_$%(@,'.'$^_})'))
Perlは変態?こちらをどうぞ。
#!/usr/bin/ruby19
_=[*' '..?~]*'';$><<_[(__=_=~/_/).-_=~/\-/]+_[(@_=_=~/~/).-_=~/\)/]+_[__.+_=~/\#/]+_[@_.-_=~/%/]+" "+_[__.+_=~/\*/]+_[@_.-_=~/\+/]+" "+_[__+@@_=_=~/&/]+_[@_.-_=~/\(/]+_[__+@@_]+_[__.+_=~/\//]+" "+_[__.+_=~/\#/]+_[__.+_=~/"/]+_[__+@@_=_=~/%/]+_[__+@@_]+_[__.+_=~/&/]+_[@_.-_=~/,/]+?!+$/
Enjoy!
[-]>[-]++++++[<+++++++++++>-]<++.[-]>[-]++++++++[<++++++++++++>-]<+.[-]>[-]+++++++++++[<++++++++++>-]<.[-]>[-]++++[<++++++++>-]<.[-]>[-]++++++++[<++++++++++++++>-]<++++.[-]>[-]++++++++[<+++++++++++++>-]<.[-]>[-]++++++++++[<++++++++++>-]<+.[-]>[-]++++[<++++++++>-]<.[-]>[-]+++++++++[<++++++++>-]<++.[-]>[-]+++++++++[<+++++++++++++>-]<.[-]>[-]++++++++[<++++++++++++++>-]<+++.[-]>[-]++++++++[<++++++++++++++>-]<++++.[-]>[-]++++[<++++++++>-]<.[-]>[-]++++++++[<++++++++>-]<+.[-]>[-]+++++++++++[<++++++++++>-]<.[-]>[-]+++++++++++[<++++++++++>-]<+.[-]>[-]++++++++[<++++++++++++++>-]<++++.[-]>[-]++++++++[<+++++++++++++>-]<.[-]>[-]++++++++++[<++++++++++>-]<+.[-]>[-]++++++++[<++++++++++++++>-]<++.[-]>[-]++++[<++++++++>-]<.[-]>[-]++++++[<+++++++++++>-]<+++.[-]>[-]+++++++++++[<++++++++++>-]<.[-]>[-]+++++++++[<+++++++++++>-]<.[-]>[-]+++++++++++[<++++++++++>-]<+.[-]>[-]++++++++++[<++++++++++>-]<.[-]>[-]++++++++++[<++++++++++>-]<+.[-]>[-]++++++++[<++++++++++++++>-]<++.[-]++++++++++.
このブログにコメントするにはログインが必要です。
さんログアウト
この記事には許可ユーザしかコメントができません。