1

以下がうまくいかなかったのはなぜだろうと思っています。

   (1=$:@([:+/[:*:@"."0":)`]@.(e.&1 4))7
1

   (({&('no';'yes'))@(1=$:@([:+/[:*:@"."0":)`]@.(e.&1 4)))7
┌──┐
│no│
└──┘

yes2 番目の引数を取っているため (最初の式が に評価されるため)、返されることを期待し1ます。誰か説明してくれませんか?

ありがとう。

4

1 に答える 1

3

あなたが何をしようとしているのかを理解するのは難しいことを認めなければなりませんが、問題は自己参照 ($:) の使用だと思います。

J 辞書の Self-Reference の説明には、「$: はそれを含む最長の動詞を表す」と記載されています。 http://www.jsoftware.com/help/dictionary/d212.htm

({&('no';'yes'))元の動詞と 組み合わせること で

(1=$:@([:+/[:*:@"."0":)`]@.(e.&1 4))

$: self が参照する動詞を実際に変更しましたが、これが (予期しない) 動作につながると思います。これが役立つことを願っています。$: を使用する理由を教えていただければ、あなたの動詞がこのように機能する理由について、より良い答えを出せるかもしれません。Jには通常より良い解決策があるため、私はそれをほとんど使用しない傾向があります.

ちょうど別の考え。作成しようとしている動詞の部分を個別に定義できます。これにより、 $: の範囲が制限され、希望する動作が得られます。

   choose=: (1=$:@([:+/[:*:@"."0":)`]@.(e.&1 4))
   display=:({&('いいえ';'はい'))
   表示 @ 選択 7
┌───┐
│はい│
└───┘</pre>
于 2013-10-05T07:06:08.473 に答える