Scheme は目に優しいか
毎日ちょっとづつ Scheme をいじっていて、「Scheme って目に優しいかも」と思った。主に、Perl と比べて、だけど。
「さあ昨日の続きを書こう」と思ってエディタでファイルを開いたときに目に飛び込んでくる characters の種類によって、精神に与えるダメージの大きさが違うように思う。
Scheme のソースは括弧 '('
, ')'
やセミコロン ';'
が多く、Perl のソースはドルマーク '$'
と、アンパサンド '&'
と、シャープ '#'
が多い気がする。
括弧は、その形状が「シュッ」としているので、シャープやドルマークに比べて「うげげ!」感が小さいように思う。
実験
ASCII 表を見ながら、こんな scheme のプログラムを書いてみた。
やってることは、標準入力を読んで、記号だけを出力する。(スペース、アルファベット、数字、制御文字は表示しない。)
#! /usr/bin/env gosh (define (main args) (let loop () (let1 c (read-char) (cond ((eof-object? c) #f) ((or (and (char>=? c #\!) (char<=? c #\/)) (and (char>=? c #\:) (char<=? c #\@)) (and (char>=? c #\[) (char<=? c #\`)) (and (char>=? c #\{) (char<=? c #\~))) (write-char c) (loop)) (else (loop))))) 0)
これを symbol_only.scm
という名前で保存し、このプログラムに、手元の scheme ファイルを食わせてみる。
% find ~/prog/scm -name '*.scm' | xargs cat | ./symbol_only.scm
実行結果:
#!////(()()(()())((-))((())((<)(-!(+(-)))()((+)))))#!///(()((--)((((-)))((-?)()(( --)(--))((-))))))#!////((--)(-(((-(()(!(+))))(-(()(!(-)))))(--))))(()(()(-)(())(( ))(())(())(())(())))#!////(()('(#\#\#\#\#\#\#\#\))(--))((-)(#"\")(((--?#[\])("")) (("")))(((-?)(""))((""))))#!////(()((--"/")(((-)((-)))((-?)(#":\"-)((+-)(-))))))# !///(()(()((-)(((-?)#)((((>=?#\!)(<=?#\/))((>=?#\:)(<=?#\@))((>=?#\[)(<=?#\`))((> =?#\)(<=?#\`)))(-)())(())))))#!////(-)(-)()(.)(--!--)((--)(-(()(-))))(()((())((>) ((--)(-!(->);(#"\"));((-))))))(()(()(#":\"))(--))(()(')(((?')((-<>:"":-:)()(-)))( (?')((-<>:"":-:)()(-)))))#!////((-)((((--#/\\/(--#/\*(\+)/"\\")"")))))(()(-(-'(": ::::::"":::::::"":::::::"":::::::"":::::::"":::::::"))))#!////(-)(-)((-)((-)((()( ))(((?))((?())(()(+)))())))((--)((()()()())(((?)((>)()()))((*-((()((-)))(()((>)() ())))#;(#"***===\")(()(+)))))))(((-><>)(-#\:))(-((()(--)))(((-><>))(((?))((-(-()" :")"::"(-((+))":"))))))))(()(-'(":::::::"":::::::"":::::::"":::::::"":::::::""::: ::::"":::::::"":::::::"":::::::"":::::::"))(-(()()((-)))-))#!////(-)(-)(--!--)(() ((-(()(-))))())#;((--)((())((>)((-))((-))))())#!////(-)(-)(--!--)(()((-(((-)<>))) )())#;((--)((())((>)((-))((-))))())#!////(.)((-)(-'())((-)(((-?))((-?)(-(-)))((!- (-))(-(-)))))((-)(((-?))((-?)((->(-)))(!-'())(-(-)))((!-(-))(-(-)))))(-(-)))((--) ((--=?<?))((-)(--!#))(--)(-(()())(--)))(()(())((->()))((--))((--))(-)(--)((--(--) 略
今度は /usr/local/bin
内にある、すべての Perl Script を流し込んでやる。
% ( cd /usr/local/bin && \ls -1 | xargs file | grep 'perl script' | sed -e '/:.*/s///' | xargs cat ) | ./symbol_only.scm
実行結果:
#!///#-*--*-#()-,,,.#(@.)##.##;/##;,()#.##,#;#.#.###;.,#,-,,-,.$=$;$=@.*/@@;'.'; ('::::');($_)"()..\";;($#!=)":$[-][-][-][-][-]\";$=$[];$=$[];$=$[];$=$_"";#(,$)" $:'\`$[]':$!\";(<>);@=('');($[]"")$=$[];($[]"")$_=-$[];($[]"")($#==)(,$[]);(,$[] );(,$[]);($[]"")$_$[]=$[];($[]"")$__$[]=$[];($[]"")$_$[]=$[];($[]"")(<>)@=('');( $[]"");($[]"")$=-;$=;$="";$=;$=;$=;$=;$=$[];$=;($<=$#)($[$]"")$=$[$+];$+=;($[$]" ")$=$[$+];$+=;($[$]"")$=$[$+];$=$[$+];$=$[$+];$=$[$+];$+=;($[$]"")(,$[$+]);$+=;( $<=$#&&$[$]";")$++;$++;(!$_&&$!=-)$[$]=$;$_$=;$$=$;$$=$;$$=-$;$__$=-$;$__$=$-$;( );#$=;(,$)"$:'\`$':$!\";(<>)/^#/;;@=('');$[]"";($[]"")$=$[];($[]"")$=$[];($[]"") $=$[];();($_)#(,$_)"$:'\`$_':$!\";(<>)/^#/;;@=('');($#==)($[]>=&&$$[])$[$[]]=$[] ;$_$[]=;();#(,$)"$:'\`$':$!\";(<>)/^#/;;@=('');($#==&&$_$[])($$[])"$$[]$[]$[]";( $[]"")#""#"";"`'";($[]"")"`'";$$[]+=;$$[],$$[]=$[];$$[]+=;$$[]=$[];();$_=$_$_;#( ,">$")"$:'\`$':$!\";();("$\");("$\")$;("\")$_;("%\",$_)$_!=;("%\",($""))$"";($_) $=$_;$=@.*/@@;("$\");(!$_&&$#>=)("");$(@)("$");("\");($#>=)("\");($=;$<=$#;$++)$ =$[$];$=$[$];($_$==&&$$!=&&$_$==&&$$!=)($=;$<$$;$++)($=;$<$$;$++)($[$]!=)("%%%\" ,$$,$,$$,$,($[$]));#_$_=$""-;#$_=$"";$_=$""$""<$_;$_=$""$""<$_;$_=$""$""<$_;$_=$ ""$""<$_;$_-=;($"")$=$"";($"")$=$"";$=;$_=$_*./.;$=($_)/($_);$=$<;("\");($=;$<;$ ++)$=$[$];($""&&$"")$$,""="---"$$==;$=;$=$$;$=$<;$=$$;$=$<;$=$>=$_;$+=$>=$_;("%\ %",$$,"",($$));$_=;$__=;$_=;($_)$_=$__$+$_;$_=$_<;$_=$*$*.;$_=$_$_>$_;$__=$__$+$ 略
やっぱ、Perl のほうが「うげげ!」度が高い。
ついでに
ついでに、FreeBSD のソースコード(C言語)も流しこんでみた。
%find /usr/src -name '*.c' | xargs cat | ./symbol_only.scm
/*****("").*.**//.*://..//.**.**,*//..*,,*"[]"*:[][]****$://////.,.....//::$*//* *..*.*/#<.>#<.>#<.>___*_=;_{__*;__*;*_;_;};/**_().'.*/*_(_,){(==_||==_);(==);*=( );(==){(!(&_));(_!=)_();();};}/**_().*/*_(_,){(==_||==_);(==);*=(,);(==){(!(&_)) ;(_!=)_();();};}/**_().*/_(*,_){();}/**__().*/__(___*){_=;}/**__().*/__*__(*_,_, _,__*,__*,__*,*_,*,){(==);__*=((__));(==);->=;->=;->_=_;->=;;}/**__().'.*/*__(__ *,){*=(->);(==){(!(&_));(_!=)_();();}(->!=){(->(,->_,)!=){();(!(&_));(_!=)_();() ;}};}/**__().*/__(__*,*){(->!=)->(,->_);();}/**__().*/__(__*){();}/*-*()<@.>*.** ,*,*:*.*,.*.*,*/.**``''*,,,**.*,,,,,*(,,*;,,;)*,,*,()*,*.*/#</.>__("$://///.,... ..//::$");#</.>#</.>#<.>#<.>#<.>#<.>#<.>#<.>__(*,__*,**_){((->,,(->))>=(->)){(); }*_=("");(*_==);();();}___(*_,__,*_,__**){[];*;(__(.,,())==-)();*=((**));(*==)() ;(((*)[].,,((*)[].))>=((*)[].)){(*);();}();}__(*){();}_(__){/*.*/}__(__*){();}_( ,__*){((,,->)==-)();(->[]=='\')();();}___(,**_){*_=("");(*_==)();();}*__(__,*_){ ((.));}/*-*()<@.>*.**,*,*:*.*,.*.*,*/.**``''*,,,**.*,,,,,*(,,*;,,;)*,,*,()*,*.*/ #</.>__("$://///.,.....//::$");#</.>#<.>#<.>#<.>#<.>#<.>#<.>#<.>#<.>/*__*/#<.>#_ "#!!!!!!\\"##(_+)_(){*;_;=_(__,,&);(!=){/*.*/_();;}(!=){/*.*/;}/*().*/(,);}/**., *''.*/*(*,*){[];_,;*,;(!=)=();(;;){=(,(),);(==)();/*.*/([]=='\'||[]=='#');=();([ 略