1
APLXでquicksortを実装しようとしていますが、この値のエラーを修正できないようですが、文:If((ITEM COMPARE PIVOT)≤0)
から取得し続けます。いくつかのテストの後、私は問題がForループ内でIf文を使用しているという事実にあると信じていますが、なぜそれが問題になるのか分かりません。ここでの問題は、他の場所である念のために全体の機能(あるいは、むしろオペレータ)、です:APL/APLX:forループ内でifステートメントを使用すると値エラーが発生する
(COMPARE QSORT)ARRAY
⍝ If the array has a size of 1
⍝ or less, return
:If (⍴ARRAY) ≤ 1
ARRAY
:endif
⍝ set pivot to last element in array
PIVOTINDEX ← ⍴ARRAY
PIVOT ← PIVOTINDEX⌷ARRAY
⍝ remove pivot from array by assigning
⍝ array to all elements up to pivot index
ARRAY ← (PIVOTINDEX-1)↑ARRAY
⍝ Make empty vectors for values greater
⍝ than and less than the pivot
LESSER ← ⍳0
GREATER ← ⍳0
⍝ loop over ARRAY, place items in GREATER
⍝ or LESSER where appropriate
:For ITEM :In ARRAY
:If((ITEM COMPARE PIVOT)≤0)
LESSER ← LESSER,ITEM
:Else
GREATER ← GREATER,ITEM
:EndIf
:EndFor
SORTED ← SORTED,(COMPARE QSORT LESSER)
SORTED ← SORTED,PIVOT
SORTED ← SORTED,(COMPARE QSORT GREATER)
SORTED
ありがとうございました。私のCOMPARE機能では戻り値がありませんでした。私はAPLの値を返すことはRubyで値を返すような印象を受けていました。 – wptreanor
ここでQuicksortをコーディングしていたとき、昨日Dyalogのブログを閲覧しているうちに、私はこれらの2つが興味深いかもしれないことを知った;-) http://www.dyalog.com/blog/2014/12/quicksort-in-apl/とhttp: //www.dyalog.com/blog/2016/02/quicksort-in-apl-revisited/ – MBaas
wow APLは、私が思ったよりもはるかに簡潔です。リンクありがとう! – wptreanor