dcでseq 10する

ドラマ『東京タラレバ娘』(2017)
あの時ああだっタラ、もっとこうしてレバ。私もそのような空想の世界に浸りますが、空想することが幸せなのだからいいんです。タラレバでいいじゃないか。それに愚痴も楽しい。成功ばっかりしてる人より、失敗続きだけどへこたれず頑張って夢見てる人の方が楽しいですし。まあ、成功者はもともとはみんなタラレバなんじゃないかと思ってます。

タラレバなので、dcにおけるif thenをやろうと思ったのですが、seq 10やります。数字のチェックに判定使いますし。

seq 10は、1から10までを並べて表示するだけのコマンドですが、同じことを、dcでもできるでしょうか。

スタック操作を考えます。1から順に積み上げると反対に表示されてしまいますので、10,9,8というように10から順に1減算しながら積み上げていきます。

10
                        |       |
                        |       |
                        |       |
                        |       |
                        |  10   |
                        +-------+
                          stack

dコマンドでスタックの一番上の値をコピーしてスタックへ積み上げます。

d
                        |       |
                        |       |
                        |       |
                        |       |
                        |  10   |
                        |  10   |
                        +-------+
                          stack

積み上げた数字から1減算したいので、1-を実行します。

1-
                        |       |       |       |
                        |       |       |       |
                        |       |       |       |
                        |   1   |  -->  |       |
                        |  10   |       |   9   |
                        |  10   |       |  10   |
                        +-------+       +-------+
                          stack           stack

これを繰り返すマクロを実行すれば良いです。

[d1-d1<f]sf
10lfx
f
1
2
3
4
5
6
7
8
9
10

できました。

でもこのままでは、コマンドの連携に使えませんので、dcの-eオプションで、ワンライナーにします。

takk@deb8:~$ dc -e '[d1-d1<f]sf 10lfxf'
1
2
3
4
5
6
7
8
9
10
takk@deb8:~$ 

一つのコマンドにしましょう。

takk@deb8:~$ cat dc-seq.sh
dc -e "[d1-d1<f]sf $1lfxf"
takk@deb8:~$ 

スクリプトを使ってみます。

takk@deb8:~$ . dc-seq.sh 10
1
2
3
4
5
6
7
8
9
10
takk@deb8:~$ 

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA