2015-04-03 3 views
5

Так что я наткнулся на этот фрагмент кода на сайте J:Что такое # ^: _ 1

mask #!.fill^:_1 lst 

где маска список немного.

Имеет смысл, насколько это возможно. Результатом является лицевая сторона маски & #, примененная к lst, с неизвестными значениями, замененными заполнением.

Однако, как представляется, не обобщать:

2 2 (#!._^:_1) 3 3 4 4 

дает ошибку области, а не "3 4", как можно было бы ожидать.

Что именно # ^: _ 1, и почему это не является надлежащей лицевой стороной №?

+1

Обнаруженные ошибки перечислены на странице [страница для власти] (http://jsoftware.com/help/dictionary/d202n.htm): 'b & # ^: _ 1 где b - это логический список Expand (заполнение которого atom f может быть задано с помощью fit, b & # ^: _ 1! .f или # ^: _ 1! .f) ' – Eelvex

ответ

4

Полагаю, что (#!._^:_1) распространяет правильный аргумент, либо принимая индексированное значение, если позиция имеет один или заполняется значением заполнения, если оно равно нулю.

(1 1 0 1 0 1) (#!._^:_1) 3 3 4 4 
3 3 _ 4 _ 4 

Он не обобщает полностью, потому что значения, отличные от 1 или 0, приведут к ошибке домена, которую вы видите. См. Случай 6 на этой странице словаря. http://www.jsoftware.com/help/dictionary/d202n.htm

Вы также можете посмотреть, как сложные числа взаимодействуют со стандартной (не-лицевой) версией #, поскольку это кажется более обобщаемым.

2j1 #!._ 3 3 4 4 
3 3 _ 3 3 _ 4 4 _ 4 4 _ 
    2j1 1j2 3j0 1j1 #!._ 3 3 4 4 
3 3 _ 3 _ _ 4 4 4 4 _ 

В этом случае действительная часть комплексного аргумента mjn делает m копии соответствующего элемента правого и мнимую часть вставляет n значения заполнения. http://www.jsoftware.com/help/dictionary/d400.htm

+1

Да, это было прямо на странице словаря. Спасибо, парни! Это странно - _expand_ - частный случай того, что должно быть истинным аверсом #. Интересно, почему он не был реализован полностью. Не полезно? – theforemancrew

Смежные вопросы