2015-04-03 15 views
5

Więc natknąłem się na ten kawałek kodu na stronie j:Czym dokładnie jest # ^: _ 1

mask #!.fill^:_1 lst 

gdzie maska ​​jest lista bitów.

Ma sens aż do końca. Rezultatem jest awers z maski & #, zastosowany do lst, z nieznanymi wartościami zastąpionymi wypełnieniem.

Jednak nie wydaje się, aby uogólnić:

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

daje błąd domeny, zamiast "3 4", jak można się było spodziewać.

Czym dokładnie jest # ^: _ 1 i dlaczego nie jest właściwym awersiem #?

+1

awersach przedstawiono w [strony do zasilania] (http://jsoftware.com/help/dictionary/d202n.htm) 'b & # ^: _ 1, w którym B jest lista logiczną Expand (którego wypełnienie atom f może być określony przez dopasowanie, b & # ^: _ 1! .f lub # ^: _ 1! .f) ' – Eelvex

Odpowiedz

4

Wierzę, że (#!._^:_1) rozkłada właściwy argument, przyjmując indeksowaną wartość, jeśli pozycja ma wartość lub wypełniając wartość wypełnienia, jeśli jest równa zero.

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

To nie uogólniać, bo zupełnie inne wartości 1 lub 0 spowoduje błędu domeny, które można zobaczyć. Zobacz case 6 na tej stronie ze słownikiem. http://www.jsoftware.com/help/dictionary/d202n.htm

Można również przyjrzeć się, w jaki sposób liczby zespolone wchodzą w interakcje ze standardową (nie-awersowalną) wersją #, ponieważ wydaje się, że jest to bardziej możliwe do uogólnienia.

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 _ 

W tym przypadku prawdziwy składnikiem kompleksu argumentu mjn sprawia m egzemplarzy odpowiadającej właściwej pozycji i składowej urojonej wstawia n wartości wypełnienia. http://www.jsoftware.com/help/dictionary/d400.htm

+1

Tak, był tam na stronie ze słownikiem. Dzięki chłopaki! To trochę dziwne - _expand_ jest szczególnym przypadkiem tego, czym byłby prawdziwy awers #. Zastanawiam się, dlaczego nie zostało to w pełni zaimplementowane. Nieprzydatne? – theforemancrew