2

フィット接続詞expandwithのデフォルト値を指定することは可能ですか?!.通常、のデフォルトの塗りつぶし値を指定することは可能です#が、どう#^:_1でしょうか。

たとえば、

    empty =. <0 0$''
    r =. 0 1 0 1 expand!.empty 'foo';'bar' NB. Actually a domain error
++---+---++
||foo|bar||
++---+---++
    $ each r
+---+-+-+---+
|0 0|3|3|0 0|
+---+-+-+---+

私が試したすべてがドメインエラーをスローします:

expand!.empty
#^:_1!.empty
#!.empty^:_1
(#!.empty)^:_1
4

3 に答える 3

5

はい:

0 1 0 1 expand f.!.empty 'foo';'bar' NB. with f. works fine
++---++---+
||フー||バー|
++---++---+

トリックはf.orを#^:_1匿名で使用すること!.です。フィットはそれほどスマートではありません。#^:_1expand

于 2011-03-25T13:38:32.140 に答える
2

expandフィット結合を使用して( #^:_1)の塗りつぶしを変更する方法を知りません。

私が使用する方法を知っているテクニックはexpand、塗りつぶし要素を指定する同等のものを書くことです。

次のコードでは、説明したようなカスタム拡張が可能です。バージョン 5 に依存しているとのことでしたので、バージョン 5 で動作するように作成されていますが、バージョン 6 でしかテストしていません。

   xpand=: 1 :'((retention j. expansion)@:[ #!.u prep@:])'
   prep=: ,~ {.
   retention=: 0:, +/ # 1:
   expansion=: [:forwarddifference [:tallyzeros [:partition [:<\ pad
   forwarddifference=: 2&(-~/\)
   tallyzeros=: +/ @: -. &>
   partition=: #~ (1: = {:)&>
   pad=: 1&([,~ ,)

   NB. example of use
   empty =. <0 0$''
   ]r=. 0 1 1 0 empty xpand 'foo';'bar'
┌┬───┬───┬┐
││foo│bar││
└┴───┴───┴┘
   $ each r
┌───┬─┬─┬───┐
│0 0│3│3│0 0│
└───┴─┴─┴───┘

元の回答を投稿して以来、より簡潔な代替案を取得しました。

   xpand =: 1 :' index @:[ { u,~] '
   index =:  retain + insert
   retain=:  I.@:] }~  [:i.+/
   insert=:  +/ * -.

このu,~]部分はバージョン 5 と互換性がないことに注意してください],u"_。互換性のために代わりに使用してください。

于 2011-03-17T18:36:28.987 に答える
1

別のアプローチは次のとおりです。

   inv=: ^:_1
   1 0 1 0 1 ((#inv #\) { 'z'&,@]) 'abc'
azbzc

名詞を、作業したい名詞に置き換えてください...

したがって:

   fillExpand=:1 :'(#inv #\) { m&,@]'
   empty=:<i.0 0
   0 1 0 1 empty fillExpand ;:'foo bar'
++---++---+
||foo||bar|
++---++---+
   $&.>0 1 0 1 empty fillExpand ;:'foo bar'
+---+-+---+-+
|0 0|3|0 0|3|
+---+-+---+-+

とはいえ、#\ はバージョン 5 では非効率的であることに注意してください。バージョン 5 では、#\ を 1 に置き換えます: + i.@#

そうは言っても、ダン・ブロンの提案 #!.empty^:_1 は私にとっては問題なく機能し、バージョン 5 でも問題なく機能するはずであることに注意してください。

于 2011-03-25T13:25:52.463 に答える