ввод командной строки для J

Я пытаюсь прочитать ввод командной строки по этой ссылке (http://www.jsoftware.com/help/user/hashbang.htm)

0".>,.2}.ARGV

Я понимаю, что 2}.ARGV удаляет "jconsole" и часть имени программы.

0". превращает строку в числа

зачем нам ,.

который, кажется, излишне добавляет дополнительный ранг к входным параметрам, в случае

'a b c d' =: 0".>,.2}.ARGV
 $a
 1

Почему бы просто не

'a b c d' =: 0".> 2}.ARGV
$a

Еще одно предостережение:

'a' =: 0".> 2}.ARGV
$a
1

Таким образом, если вам передан только один аргумент, 'a' становится списком с рангом 1, а не одним элементом входного списка.


person Zhe Hu    schedule 03.01.2013    source источник


Ответы (1)


Разница в том, что без ,. результат не всегда представляет собой список «пронумерованных» (".) элементов, по одному для каждого аргумента. Равеллинг гарантирует, что 0". будет применяться к каждому аргументу отдельно.

Например, если ваш ARGV представляет собой список символов:

]in =: 2 }. ARGV
┌─┬─┬─┬─┐
│1│2│3│4│
└─┴─┴─┴─┘
> ,. in
1
2
3
4

но

> in
1234

so

0". > ,. in
1 2 3 4

но

0". > in
1234

Другие способы применения 0". к каждому аргументу отдельно включают (0". >)"0 in и > 0". &.> in. Из этих трех наиболее эффективным является тот, который использует равель.

person Eelvex    schedule 05.01.2013
comment
просто хочу отметить, что если ]in=: 11;2;3;4, то ›in, кажется, может правильно дополнять числа пробелами - person Zhe Hu; 07.01.2013
comment
@ZheHu, да, в большинстве случаев они почти эквивалентны. Это особые случаи, которые дают неправильные результаты, когда ,. отсутствует. - person Eelvex; 07.01.2013