66592


競技プログラミングの問題をJ言語で解いてみようと、J言語について調べています。

先ずは、標準入力を標準出力に出したいと思い、標準入力を探しました。

[Read input from line in J - Stack
Overflow](https://stackoverflow.com/questions/13693806/read-input-from-line-
in-j/13694424#13694424)  
"  
That's a common mistake with foreigns.

The definition for foreign 1!:1 doesn't help, because it really reads:

1!:1 y Read. y is a file name or a file number (produced by 1!:21); the  
result is a string of the file contents., e.g. 1!:1 <'abc.q'. The following  
values for y are also permitted:

1 read from the keyboard (does not work within a script)  
3 read from standard input (stdin)  
And so replacing y with 3 should work, right? Well, not quite, because what
you're really giving as an argument in writing:

1!:1 3"

<http://localhost:65001/jijx>  
で、  
1!:1 3  
を実行したところ、

> >  
>  |rank error  
>  | 1 !:1 3

と、ランクエラーが出ました。

環境は、MacOSで、

[code]

    brew install cask j
    
[/code]

でJ言語をインストールしました。

青いアプリの

> > jhs901.app

で立ち上げたJ HTTP SERVER  
のIDE(?)を使ってます。

よろしくお願いします。

参考  
\- [1!: Files](https://www.jsoftware.com/help/dictionary/dx001.htm)


CC BY-SA 4.0
2020-05-14T03:55:40.627
66589
2020-05-14T12:56:01.863
27777
question
macos
J言語の標準入力が分かりません。1!:1 3で|rank error | 1 !:1 3となります。


J言語というのは懐かしのAPLの後継となるべく設計された言語ということで、興味深かったので、ニワカではありますが調べさせてもらいました。

まず、ランクエラーのランク(rank)と言う言葉ですが、これは一般的な他言語で言う所の多次元配列の次元数(場合によっては、各次元の要素数を表すかもしれない)を表します。

[`!:`と言うconjunction(接続詞)](https://www.jsoftware.com/help/dictionary/xmain.htm)は、

> The conjunction !: applies to integer scalar left and right arguments to
> produce verbs

(拙訳)

> `!:`と言う接続詞は、左右両辺の整数型スカラーに適用されて、動詞を生成します

と書かれています。つまり`!:`の左右両辺は整数型スカラー(言わば0次元配列)でないといけないのです。

ところが、あなたの入力、

[code]

    1 !:1 3
    
[/code]

では、`!:`の右辺に`1 3`と言う1次元配列を与えています。

よって、「次元数が合わないよ」と言うエラーになっているのです。

* * *

対処方法は、リンク先の回答に書かれているのですが、その前半部分は、「[(あなたも挙げられた)ドキュメント](https://www.jsoftware.com/help/dictionary/dx001.htm)は、見にくいよね、ドキュメントの`y`を置き換えるだけじゃ使えないんだよ」と言うことの説明になっています。

と言うわけで、最後の1行だけを見てください。

>
[code]

>     1!:1]3
>  
[/code]

他の言語の文法に慣れている人には`]`が単独で使われているのには違和感があるかもしれませんが、常に右方優先で式を解釈するJ言語ではこれで「`!:`の右辺は`1`だけ」を示すのに十分なわけです。

* * *

[動作確認は公式サイトからダウンロード](https://code.jsoftware.com/wiki/System/Installation/J901/Zips)したjconsoleで行ったので、若干標準入力の取り扱いが異なるかもしれませんが、少なくともrank
errorは出なくなるはずです。


CC BY-SA 4.0
2020-05-14T07:34:32.140
66592
2020-05-14T07:55:52.343
2020-05-14T07:55:52.343
13972
13972
66589
answer