if文の表現
Fri Mar 27 00:22:45 JST 2015 (modified: Sat Sep 30 16:15:34 JST 2017)
views: 1433, keywords:サブシェル,プログラミング,GlueLang,OR記号,研究 この記事は最終更新日が7年以上前のものです。
GlueLangのif文相当の処理をまたいじったがこれで最後にしたい
眠いです。
GlueLangのif文及びその周辺、またいじりました。
やっぱり波括弧やめた
前回、複合コマンドをこんなふうに書くようにしましたが・・・
uedambp:SRC ueda$ cat hoge
#!/usr/local/bin/glue
import PATH
{
echo 'abc'
echo 'def'
} >>= rev
uedambp:SRC ueda$ ./hoge
cba
fed
こうしました。やっぱりHaskell, Python系の書き方にしようとしているのに波括弧はあまり合わんという判断。波括弧が最終行の最後にあったら認識しないようになってましたし・・・(アカン)。doの次の行からがサブシェル扱いされます。最初の行のインデントがオフサイドラインになります。
uedambp:GlueLang ueda$ cat huge.glue
#!/usr/local/bin/glue
import PATH
do
echo 'abc'
echo 'def'
>>= rev
uedambp:GlueLang ueda$ ./huge.glue
cba
fed
procにもdoが必要に
これに伴い、procで2行以上書くときにもdoが必要ということにしました。イコールの後に一行で書くときは不要です。
uedambp:GlueLang ueda$ cat hoge.glue
#!/usr/local/bin/glue
import PATH
proc hoge = do
echo 'abc'
echo 'def'
hoge >>= rev
uedambp:GlueLang ueda$ ./hoge.glue
cba
fed
んで、最終的にif文に相当する表現は次のようになりました。前回の
#!/usr/local/bin/glue
import PATH
{
false
echo 'hoge'
} !> {
echo 'foo'
} !> {
echo 'bar'
}
は、
uedambp:GlueLang ueda$ cat hoge.glue
#!/usr/local/bin/glue
import PATH
do
false
echo 'hoge'
> do
!echo 'foo'
> do
!echo 'bar'
となりました。
ただ、この書き方だと前回言ったようにサブシェル内のコマンドが全て条件文になってしまう(if文というよりもtryみたいになる)ので、ちゃんと条件と条件が満たされたときに実行される部分を分けたいときは、
uedambp:GlueLang ueda$ cat if1.glue
#!/usr/local/bin/glue
import PATH
test 1 -eq 2 ? do
echo 'first subshell'
echo '1 = 2'
> test 1 -eq 1 ? do
!echo 'second subshell'
echo '1 = 1'
> echo 'third command'
!###実行###
uedambp:GlueLang ueda$ ./if1.glue
second subshell
1 = 1
と書いてもらうことにしました。?の左側に条件、右側に条件がtrueのときに実行される部分を書きます。別にサブシェルを使う必要のないときは、
uedambp:GlueLang ueda$ cat if2.glue
#!/usr/local/bin/glue
import PATH
test 1 -eq 2 ? echo '1 = 2'
> test 1 -eq 1 ? echo '1 = 1'
!> echo 'third command' !
となります。ちょっとスッキリしませんが、if文自体あんまり使うことは無いはずなので、これでよしとしたいです。
実は「?」は、「!>, >>, >>=」と同じグループの演算子なので基本的にこれはif文でなくコマンドを接続しているだけです。ですので、
uedambp:GlueLang ueda$ cat if3.glue
#!/usr/local/bin/glue
import PATH
test 1 -eq 2 ? echo '1 = 2' !> test 1 -eq 1 ? echo '1 = 1' !> echo 'third command'
と書いても動きますが、さすがにインデント入れないと可読性皆無になりますね。
ところで、だれかGlueLangの開発についてこれてますかね???
あかん。孤立気味だ。
寝る。