2016-12-13 11 views
2

APLには、他の数値ベースを「デコード」するために使用されるプリミティブ関数があります。関数の左側では、各桁に関連付けられたプレースメント値をもう一方の数値ベースに入れます。右側には、あなたが興味を持っている数字のベクトルを置くAPLの⊥-デコードで、基数ベクトルに余分な数値が必要なのはなぜですか?

をたとえば:。

2 2 2 2 ⊥ 0 1 0 1 ⍝ (What you type in) Convert 0101 form base 2 into base 10 
5      ⍝ (What the interpreter computes) 

しかし、基数ベクトルの左端の2は、任意のデコードの計算に使用されることはありません。たとえば、

 ¯48 2 2 2 ⊥ 0 1 0 1 ⍝ We can replace the leftmost radix digit with a random number 
5       ⍝ Same answer as before 

     ¯48 2 2 2 ⊥ 1 1 1 1 ⍝ Just to prove that the leftmost decode digit is unused 
15      ⍝ Correct decode of 1111 

     65 2 2 2 ⊥ 1 1 1 1 ⍝ Try another random number for testing 
15      ⍝ Again, the correct answer is output 

左端の数字が使用されない場合、なぜAPLはそれを必要としますか? (具体的には、APLは基数ベクトルと入力ベクトルの両方が同じ長さであることが必要です)私が気づいていないデコード関数にはいくつかの用途がありますか?

+0

おそらく、最も左の値の桁が範囲内にあることを検証するために使用されていますか? – jasonharper

+0

うーん、良い考え。しかし、通訳者は文句を言っていないようです: '2 2 2 2⊥44 1 1 1'は '359'を返します – Mahkoe

答えて

1

あなたの文の具体的

は、APLは部分的にしか権利である両者が...同じ長さ

を持つことが必要です。 Dyalog APL Manualから引用する:

X及びYが適合されているXの最後の軸の長さは、スカラーまたは1要素ベクトルをに拡張されたYの第一の軸の長さと同じである場合必要な長さのベクトル。 Xの最後の軸またはYの最初の軸の長さが1の場合、配列はその軸に沿って拡張され、他の引数に適合します。

したがって、2 ⊥ 1 1 1 1は、15を計算するのに十分であることを意味します。

私は偉大な説明hereを見つけましたが、そのページがフォントの問題があるとして、私は適切なフォントでそれを再現します:B、声明Q←B⊥Rにおける基数ベクトルから

、我々は重みベクトルを計算します、Wを評価の第1段階として使用した。次のようにBから重み付けベクトルを計算し、(インチに変換ヤード、フィートとインチ)0 3 12 ⊥ 4 2 7:具体例を用いて

inches per yard: 3⊥12 or 36 
inches per foot: 12 
inches per inch: 1 

重み付けベクトルが36 12 1あります。 APLでは、重みベクトルの評価のためのプロセスは、次のように書くことができます:

 N←⍴B    ⍝ Length of B 
     W←N⍴0    ⍝ Give W the proper shape 
     W[1]←×/1↓B   ⍝ Product of all but the first element of B 
     W[2]←×/2↓B   ⍝ Product of all but the first 2 elements of B etc. 
     .    ⍝ etc. 
     . 
     . 
     W[N-1]←×/(N-1)↓B ⍝ Next to last element of W is last element of B 
     W[N]←1    ⍝ Last element of W is always I 

Bの最初の要素は使用されませんでした。エンコードの評価を完了するために、W回の合計を取るR:

 Q←+/W×R 

この結果はB⊥Rです。私たちの具体的な例:

 36 12 1 ⊥ 4 2 7 
144 24 7 

     144 + 24 + 7 
175 
     0 3 12 ⊥ 4 2 7 
175 
+0

" Bの最初の要素は使用されなかったことに注意してください "。正確に私のポイント;もしそれが一度も使われなければ、それはなぜそこになければならないのですか?それはAPLがメモリアライメントなどのために必要なのでしょうか? – Mahkoe

+1

ええと、私はそれについての正式な答えはありませんが、私は推測します... *逆の演算を実行するために左の引数を使うことができます。そして、最初の要素が意味をなす*おそらく実装者はargs ... – MBaas

0

私はMBaas'優秀な答えに追加するには何もありませんが、私はに関するIBMのメインフレーム上でAPL2でのバグを共有しましょう。

他人には有益かもしれませんので別途質問に入れます:LINK

0

簡単な答えは、⊥への引数が適合可能である必要があるということです。 ⊥高次のアレイに拡張するため、および内積のように、左の引数の最後の寸法は右の最初の寸法と一致している必要があり

2 2 2 2 ⊥ 1 1 1 1  ⍝ ok 
2 2 2 2 ⊥ 1 1 1 1 1  ⍝ length error 
     2 ⊥ 1 1 1 1  ⍝ scalar extension of the left argument 
2 2 2 2 ⊥ 1    ⍝ scalar extension of the right argument 

引数。

関連する問題