un*xコマンド

runghc -eを直したので以下でいける。 $ runghc -e 'import System;main=getArgs>>=mapM_ catFile;catFile a=do{c<-readFile a;mapM_ putStrLn $ zipWith (\x y->(reverse$take 4$reverse(" "++(show x)))++" "++y) [1..] (lines c)}' a.txt 1 aaa 2 bbb 3 …

その2

少し短くなった。 $ gosh -e '(for-each (lambda (x) (display (call-with-input-file x port->string))) *argv*)' a.txt b.txt foo bar buzz foo2 bar2 buzz2

だめ、俺の限界を超えてる。モナド来た しかも引数0の時動かない。 $ runghc -e 'import System;main=do{a<-getArgs;mapM (\x->getFile x) a;return ()};getFile x=do{c<-readFile x;putStr c} ' a.txt b.txt foo bar buzz foo2 bar2 buzz2 もう少し読みや…

前提 $echo -e "foo\nbar\nbuzz" > a.txt $echo -e "buzz\nbar\nfoo" > b.txtうーん、-Eexit dummyがむかつく(笑 早く慣れよう。とおもったがbashの方で対応した $ goshi -e '(for-each (lambda (x) (display (call-with-input-file x (lambda (f) (port->s…

strcatがうまく使いこなせないため着陸 rungcc -m 'int i=1;for(;i

くー、runghcの-eオプションだとmainの省略パターンみたいだ。せめて-で標準入力からとってくれるとうれしいのだが $ echo 'import System;main=do{a<-getArgs;putStrLn $ unwords a}'>a;runghc a "aaa bbb" ccc;rm a aaa bbb ccc #!/usr/bin/runghc import …

spidermonkeyで実装されたJavascriptShellでechoを作ってみた。 $ echo 'print(arguments.join(" "))'|js - "aaa bbb" ccc aaa bbb ccc #!/usr/bin/js print(arguments.join(" "))

配列が@なのとjoinの引数の順序を完全に忘れてた。 $ perl -e 'print join(" ",@ARGV),"\n"' "aaa bbb" ccc aaa bbb ccc #!/usr/bin/perl print join(" ",@ARGV),"\n"

一行どころの話じゃない(笑 やっぱ、短いプログラムにはLLの方が有利だな… $ ruby -e 'puts ARGV.join(" ")' $ ruby -e 'puts ARGV.join(" ")' aaa aaa $ ruby -e 'puts ARGV.join(" ")' "aaa bbb" aaa bbb $ ruby -e 'puts ARGV.join(" ")' "aaa bbb" ccc …

その2

string-joinはnilのとき""を返すのを発見。 gosh> (string-join ()) ""修整後。すっきりしたなあ。 #!/usr/bin/gosh (define (main args) (display (string-append (string-join (cdr args)) "\n")) 0) listをappendしてからstringに変換する方法 #!/usr/bin…

微妙。foreachかmapかで迷ってしまった。 中央に燦然と輝く";"がすごく気になるがperlでファイルを操作したのは久しぶりでこれ以上は無理(笑 $ perl -e 'foreach(@ARGV){open F,$_;print <F>}' $ perl -e 'foreach(@ARGV){open F,$_;print <F>}' a.txt b.txt foo </f></f>…

やっぱこっちの方が慣れてるな。一分かからなかった。 $ ruby -e 'ARGV.each{|i|print open(i).read}' $ ruby -e 'ARGV.each{|i|print open(i).read}' a.txt b.txt foo bar buzz buzz bar foo

echoコマンドを作ってみた。 #!/usr/bin/gosh (define (main args) (display (string-append (if (null? (cdr args)) "" (string-join (cdr args))) "\n")) 0) 実行 $ ./echo.scm $ ./echo.scm aaa aaa $ ./echo.scm "aaa bbb" aaa bbb $ ./echo.scm "aaa bb…