jのリストで動作するモナディック関数を定義するにはどうすればよいですか?
-
03-10-2019 - |
質問
次のj式があるとしましょう。
# 3 ((|=0:)#]) 1+i.1000
これにより、1〜1000の数の数が3で均等に割り切れます(今、誰もがこれを行う簡単な方法があると指摘する前に、この質問は jの構文, 、 と いいえ 数学。)
次のように、このためのモナディック機能を定義しているとしましょう。
f =: monad define # y ((|=0:)#]) 1+i.1000 )
これは、単一の議論でうまく機能します。
f 4 250
リストを渡すと、長さエラーが表示されます。
f 1 2 3 |length error: f
今、私はなぜ私が長さのエラーを得るのかを完全に理解しています。リストを置き換えるとき 1 2 3
のために y
モナドの議論、あなたは取得します:
# 1 2 3 ((|=0:)#]) 1+i.1000
Jについて何か知っている場合、長さエラーが発生している理由はかなり明確です。だから、私はそれの説明を必要としません。
リストを渡すときにリストを返すように関数を定義したいと思います。
f 1 2 3 1000 500 333
(a)この関数を再定義してリストを取得してリストを返すか、(b)おそらく副詞やその他の手法を使用して、再定義されずにリストの機能を取得することができますか?
解決
これは(b)ケースのためです:
(f@{. , $:@}.) ^: (0 < #) 1 2 3
1000 500 333
他のヒント
動詞をランクゼロとして定義するというはるかに簡単なアプローチをお勧めします。提供した動詞を使用して、それを行う簡単な方法があります。
f =: monad define "0
# y ((|=0:)#]) 1+i.1000
)
f 1 2 3
1000 500 333
唯一の変更はです "0
「定義」という言葉の後に追加されました。
所属していません StackOverflow