0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[ 最短? ] Paraphrase でスターリンソート [ 結構短い ]

Last updated at Posted at 2019-08-02

流行っているので参戦してみました。

コード

プログラム本体は以下のものとなります:

@car swap { 2dup <= if swap drop true else drop false then } filter .

結構短いのでは?と思っておりますが、どうでしょうか?
他の言語での短い実装例も見てみたいです。

最後のドットはスタックに積まれている値(この場合はリスト)を出力するものです。
filter というワードは、スタックトップにあるラムダ(無名ワード)をスタックの 2 番目に積まれているリストに適用し、リスト内の各要素に対し、ラムダを適用し true のものだけをリスト化するワードです。

使用例

> ( 1 2 1 1 4 3 9 ) @car swap { 2dup <= if swap drop true else drop false then } filter .
 ( 1 2 4 9 ) ok.

実に簡単ですね。

解説

スタック上に現在の最大値を保存しておき、それを使っています。スタックを活用する Forth 系ならではのプログラムになっているかと思いますがいかがでしょうか?

並列処理向け Forth 系言語 Paraphrase にご興味を持たれた方は、twitter で paraphrase_lang ( https://twitter.com/paraphrase_lang )をフォローしていただけると嬉しいです。

ちなみに、今回使用した Paraphrase は ver.0.93.0 開発版(現在開発中のためまだ公開できてません)です。

追記

2019.08.02 11:15 追記:
最短なのでは、と思っていたらシェル使うともっと短く書けるようです。
シェル恐るべし。

「bashでスターリンソートをやってみた」
https://qiita.com/hasegit/items/e4fbccda94db5e954668

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?