2

我如何让这个等式自行相乘?

*/-.%~.q:36

除了再次重复数字 36。顺便说一下,这是欧拉的总函数。

在此处输入图像描述

我缺少将其自身相乘的最后一步。

是的,我知道他们在 jsoftware 已经有了这个函数的代码。但我正在尝试分解代码并学习。

很抱歉问这么简单的问题。在 Google 上很难为 J 找到帮助。

4

4 回答 4

2

再次使用该值最直接的方法是再次包含该值。

   */ 36, -. % ~. q: 36
12

名称可以用于值。

   */ y, -. % ~. q: y=. 36
12

可以定义动词。该名称是其中的本地名称。

   etf=: verb : '*/ y, -. % ~. q: y'
   etf 36
12

同一个动词可以用默认的形式表达。在这种形式中,参数是隐含的,而不是命名的。这里两次使用参数值的关键是在括号内创建的钩子。

   etfT=: */ @ ( , -. @ % @ ~. @ q: )
   etfT 36
12
于 2011-02-21T16:25:35.500 回答
1

简短的回答

y * (f y)

(* f) y

更长的答案

你有一个案例

y f (g (y))

fdyad在哪里,*并且g是您已经拥有的功能:*/-.%~.q:. 现在,y f (g(y))简单地转换为“火车” (如您在手册(f g) y中所见)。使用Cap *括起来: [:g

g =: [: */ [: -. [: % [: ~. q:

我们终于有了:

phi =: * g
phi 36
12

或者

(* [: */ [: -. [: % [: ~. q:) 36
12

* 您可以使用AtopAt来构造函数g,但 Cap 通常对火车更清晰。

于 2011-02-23T05:28:51.423 回答
0

好的,这就是我想出的。

(* */@:-.@:%@~.@q:)36
于 2011-02-22T01:56:22.377 回答
0

在我尝试了这个函数试图找出它是如何工作的并进行研究等之后(我只有第二年的微积分背景),我回顾了一个旧的素数函数标签,p:发现 J 已经建立在欧拉的 totient 中功能5&p:

于 2011-02-26T02:03:21.587 回答