続・素数一覧を求めるワンライナー各言語まとめ

[前記事](https://qiita.com/ytaki0801/items/19059b35efe85519cfad)の姉妹版として『[フィボナッチ数列を求めるワンライナー各言語まとめ](https://qiita.com/ytaki0801/items/dc6392dbce6d2b9bb483)』記事を立ち上げたところ，制約条件のせいか，膨大かつ＆エレガントなワンライナーが大集合．『素数一覧』も同じようなスタイルで仕切り直してみることにしました．

※ここでいう『ワンライナー（[one-liner program](https://en.wikipedia.org/wiki/One-liner_program)）』は[シェル芸](https://ja.wikipedia.org/wiki/USP%E5%8F%8B%E3%81%AE%E4%BC%9A#%E3%82%B7%E3%82%A7%E3%83%AB%E8%8A%B8)のようなものとお考え下さい（本来は逆ですが）．コードレビューが重要視されている開発現場などでは避けるべきでしょう．

# 条件

* $1<n<100$の$n$のうち素数のみを出力（逐次出力でもREPL戻り値表示でも可）
* **素数判定・生成および素因数分解を行う関数の類は使用不可**
* ワンライナー実行は，**一行分のキーボード入力ののち改行一回**が基本
* （今回は）関数型・反復型などは問わず，**セミコロン等による複文もOK**

# 各言語での記述例

初版として，[前記事](https://qiita.com/ytaki0801/items/19059b35efe85519cfad)の記事本体やコメント欄の記述例（＋新規言語）のうち，最も短いと思われる記述および筆者が直接確認した実装・バージョンを載せています．ワンライナー実行がシェル経由などの場合は，そのための記述も合わせています．より短い表現＆他言語版歓迎（順次差し替え・追加を行います）．

```j:J(9.0.2)
(-.*/~)2+i.98
```
```jl:julia(1.4.1)（∉は2文字換算）
100|>x->(r=2:x)[r.∉[r*r']]
```
```rb:Ruby(2.7.0/irb1.2.1)
(2...100).filter{|x|(2...x).all?{x%_1>0}}
```
```sh:bc(1.07.1)
for(n=2;n<101;n++){i=2;while(n%i)i+=1;if(n==i)n}
```
```lisp:Scheme(Gauche0.9.11-p1)
(remove(.$ #/^(..+?)\1+$/ make-string)(iota 98 2))
```
```sh:calc(2.12.7.2)
for(n=2;n<101;n++){for(i=2;n%i;i++);if(n==i)print n}
```
```js:JavaScript(Node.js10.19)
for(i=1;++i<98;){for(j=1;i%++j;);i==j&&console.log(i)}
```
```sh:IchigoJamBASIC(1.4.3web)
?2:?3:?5:?7:FORI=9TO97:IFI%2*I%3*I%5*I%7?I:NEXTELSENEXT
```
```hs:Haskell(GHC8.6.5)
(\n->filter(\x->all(\z->x`mod`z/=0)[2..x-1])[2..n-1])100
```
```lisp:CommonLisp(CLISP2.49.92)
(do((i 1))((>(incf i)99))(format(=(gcd(!(1- i))i)1)"~D~%"i))
```
```py:Python(3.8.5)
[x for x in range(2,100)if not[i for i in range(2,x)if x%i==0]]
```
```scala:Scala(2.11.12/Java16.0.1)
var n=2;while(n<100){var i=2;while(n%i!=0)i+=1;if(n==i)println(n);n+=1;}
```
```lua:Lua(5.3.3)
for n=2,99 do i=2while n%i~=0 do i=i+1 end if n==i then print(n," ")end end
```
```clojure:Clojure(1.10.1)
((fn[n](filter(fn[x](not((set(map #(mod x %)(range 2 x)))0)))(range 2 n)))100)
```
```erl:Erlang(OTP24)
[X||X<-lists:seq(2,100),not lists:any(fun(Z)->X rem Z==0 end,lists:seq(2,X-1))].
```
```c:C(gcc9.3.0+dash0.5.10)
echo 'i;main(n){for(;++n<98;)for(i=1;++i<n?n%i:!printf("%d ",n););}'|gcc -w -xc -&&./a.out
```
```lisp:Scheme(GNUGuile3.0.7)
(filter(lambda(x)(not(member 0(map(lambda(z)(modulo x z))(cddr(iota x))))))(cddr(iota 100)))
```
```lisp:CommonLisp(SBCL1.4.16)
(do((n 2(+ n 1)))((= n 100))(do((i 2(+ i 1)))((=(mod n i)0)(cond((= i n)(princ n)(terpri))))))
```
```lisp:Scheme(Chibi-scheme0.10.0)
(do((n 2(+ n 1)))((= n 100))(do((i 2(+ i 1)))((=(modulo n i)0)(cond((= i n)(display n)(newline))))))
```
```rs:Rust(1.47.0+dash0.5.10)
echo 'fn main(){let mut n=2;while n<100{let mut i=2;while n%i!=0{i+=1};if n==i{print!("{} ",n)};n+=1;}}'|rustc -&&./rust_out
```
```kotlin:Kotlin(1.5.20)
fun p(l:List<Int>,n:Int):List<Int>{return if(n<99){p(l.filterNot{it>n&&it%n==0},n+1)}else{println(l);l}};p((2..99).toList(),2)
```
```vimscript:Vim(8.1)（：でコマンドラインモードに入ってから入力）
echo {g->g(g)}({g->{n,r->n<2?r :{g->g(g)}({g->{n,i->n==i?1 :n%i==0?0 :g(g)(n,i+1)}})(n,2)?g(g)(n-1,[n]+r) :g(g)(n-1,r)}})(99,[])
```
```sh:Excel（2021-06-25時点ベータ版）
=LAMBDA(g,g(g))(LAMBDA(g, LAMBDA(n,r,IF(n<2,r, IF(LAMBDA(g,g(g))(LAMBDA(g,LAMBDA(n,i,IF(n=i,TRUE,IF(MOD(n,i)=0,FALSE,g(g)(n,i+1))))))(n,2), g(g)(n-1,n&" "&r), g(g)(n-1, r))))))(99,"")
```

# 備考

## 更新履歴

* 2021-12-29：Scheme（Gauche）の記述例を変更（Twitterより）
* 2021-12-29：Python3の記述例を変更
* 2021-06-29：Cの記述例を変更（コメントより）
* 2021-06-28：Kotlinの記述例を追加
* 2021-06-25：Excel（ベータ版）の記述例を追加
* 2021-06-25：Vimの記述例を変更
* 2021-06-24：Rubyの記述例を変更（コメントより）
* 2021-06-24：LISP系言語の記述例を実装ごとに分割・変更（コメントより）
* 2021-06-24：JavaScriptの記述例を変更（コメントより）
* 2021-06-24：IchigoJamBASICの記述例を追加（コメントより）
* 2021-06-22：Jの記述例を変更（コメントより）
* 2021-06-21：Jの記述例を変更（コメントより）
* 2021-06-21：条件欄に素因数分解を行う関数の類不可の旨記載
* 2021-06-21：Vim，Lua，Common Lispの記述例を追加
* 2021-06-20：初版公開（J，Julia，bc，Ruby，calc，Haskell，Python，JavaScript，Scala，Clojure，Erlang，Scheme（iota/filter使用・未使用），C，Rust）