2

まだJの学習過程にあります...解決すべき問題は、合計の2乗から自然整数の2乗の合計を引いたものを表すことです。

素朴な解決策は

(*:+/>:i.100) - (+/*:>:i.100)

さて、フォークを使ってリストを一度だけ書けるようにしたいと思います>:i.100。私のフォークは次のようにする必要があります:

  h
/   \
f   g
|   |
x   x

ここfで、gは合計の2乗、は2乗の合計、hはマイナスです。だから、素朴に、私は書いた:

((*:+/) - (+/*:)) >:i.100

しかし、それは私にドメインエラーを与えます。なんで?私も試しました:

(+/ (*: - +/) :*) >: i.100

そして今回、それは私に数字の長いリストを与えます...それは@接続詞と関係があると思います、しかし私はまだAtが何をするのか理解していません...私の探求を続けて、私はついに得ました

((+/*+/) - +/@:*:) >:i.100

しかし、演算子を使用する代わりに手動で二乗を計算するという事実は好きではありません。また、接続詞*:が必要な理由がよくわかりません。@:誰かが私にこの問題についていくつかの光を与えることができますか?

4

1 に答える 1

3

(+/*:)そして、(*:+/)あなたが彼らがしていると思うことをしないでください。

実際には、あなたfQ (S x)(xの合計の2乗)であり、あなたgS (Q x)(xの2乗の合計)です。任意のf、gに対して=であることがわかりますf (g y)(f @: g) y

だから、あなたは書くことができます

(Q (S x)) h (S (Q x))

なので

((Q @: S) x) h ((S @: Q) X)

これは現在

(f x) h (g x)

また

(f h g) x

したがって、

((*: @: (+/)) - (+/ @: *:)) >: i.1000

1つの動詞(のような)ではなく、動詞( )と副詞( )からの複合動詞であるため、これは*: @: (+/)と同じではないことにも注意してください。*: @: +/+/*:+/

于 2013-03-01T15:37:48.483 に答える