MC百科社群

标题: 怎么做到写出一个平方的运算符 [打印本页]

作者: Death__123    时间: 2021-8-28 14:00
标题: 怎么做到写出一个平方的运算符
起因是我想写的运算符需要将一个输入参数进行两种运算然后组合一下,但是我想了一下并没有想到应该怎么做
然后我思考了一下,将问题简化了一下,发现并想不出办法,所以就来求救了
现在的目标是制作一个计算输入的平方的运算符
我知道可以做成两个输入参数的运算符,也可以用列表绕一个大弯做到,现在想问的就是有没有简洁优雅一点的方法办到

作者: Death__123    时间: 2021-8-28 14:02
@Nishiki @muse、
大佬救一下
作者: Death__123    时间: 2021-8-29 12:29
好吧,今天做别的东西的时候尝试了一下二元管道,这个二元管道快要把我搞疯了
测试得出的结论是二元管道的第一第二输入都是单输入的运算符的话可以正常使用
使用apply将一个输入怼进去,会将输入应用到这两个单输入运算符中,然后输出再作为第三个运算符的输入得出结果
但是如果第一第二个有二输入运算符,就无法使用了.....不是很懂他的逻辑了现在
作者: QQ酱73085    时间: 2021-8-29 15:44
在运算符制作那里,生成一个乘运算符不就好了么。
如果输入确定的数值用apply,输入运算符计算结果用管道
作者: Death__123    时间: 2021-8-29 18:24
我的意思是如何把这个操作塞进一个运算符里面
毕竟不是真的要做平方这一操作,只是那这个举例
今天在测试的时候发现可以用二元管道做到
还发现管道只接受输入参数只有一个的运算符
所以旧的问题解决了但是新的问题又来了
如何用最多两输入参数的运算符做出三输入参数的运算符
作者: QQ酱73085    时间: 2021-8-29 22:12
Death__123 发表于 2021-8-29 18:24
我的意思是如何把这个操作塞进一个运算符里面
毕竟不是真的要做平方这一操作,只是那这个举例
今天在测试的 ...

还是没懂
作者: QQ酱73085    时间: 2021-8-29 22:25
Death__123 发表于 2021-8-29 18:24
我的意思是如何把这个操作塞进一个运算符里面
毕竟不是真的要做平方这一操作,只是那这个举例
今天在测试的 ...

结尾那个,如何用两输入做三输入,需要统合一下。
比如所谓的三输入是 (A+B) * C 那就先传A+B的结果和C
具体情况具体分析,你还是重新描述一下需求吧
作者: Death__123    时间: 2021-8-30 14:35
QQ酱73085 发表于 2021-8-29 22:25
结尾那个,如何用两输入做三输入,需要统合一下。
比如所谓的三输入是 (A+B) * C 那就先传A+B的结果和C
...

就是a+b的结果传不进去
作者: Death__123    时间: 2021-8-30 14:35
管道传不了这种需要两个输入的运算符
作者: QQ酱73085    时间: 2021-8-30 22:46
Death__123 发表于 2021-8-30 14:35
就是a+b的结果传不进去

不是很懂你在说什么传不进去,上程序吧

作者: Death__123    时间: 2021-8-31 20:38

就是我的目标是做一个这样的有三个输入的运算符,可以用于apply3的运算符
本来第一个加运算符和第二个加运算符应该使用管道进行连接,但是实际测试发现并不能这样做
管道不接受这种两个输入的运算符
或者说这样子用管道的话,使用apply会将第一个参数应用到第一个加运算符,第二个参数应用到第二个加运算符的第二个输入参数,结果就是第一个运算符的结果是一个运算符,然后运算符类型传入接受int类型的运算符就会报错

作者: QQ酱73085    时间: 2021-8-31 22:37
本帖最后由 QQ酱73085 于 2021-8-31 22:45 编辑
Death__123 发表于 2021-8-31 20:38
就是我的目标是做一个这样的有三个输入的运算符,可以用于apply3的运算符
本来第一个加运算符和第二个加运 ...

试试?
最后apply给出来的才是结果,你画的那个图没怎么看懂。图里的加运算就是直接给定的运算,不是运算符。
管道只接受运算符的运算结果,应该是像图中这么做

作者: Death__123    时间: 2021-9-1 12:59
所以说我的目标是做个运算符出来,但你这是用给定的输入算输出....
作者: QQ酱73085    时间: 2021-9-1 13:18
Death__123 发表于 2021-9-1 12:59
所以说我的目标是做个运算符出来,但你这是用给定的输入算输出....

已经结束了啊,你在整数框里填入实参就好。
整数框就是运算符参数的输入口,你接下来是把其他变量卡的值赋值给整数框代表的变量卡
作者: 改了网名的人:    时间: 2021-9-14 14:00
把输入数据调用两次行不行,如果可以……
我是说相当于把同一个变量输入两次。
作者: 改了网名的人:    时间: 2021-9-14 14:04
改了网名的人: 发表于 2021-9-14 14:00
把输入数据调用两次行不行,如果可以……
我是说相当于把同一个变量输入两次。 ...

不好意思,发错帖了
作者: Death__123    时间: 2021-9-28 22:25
竟然有别人也来回帖了,那就再解释一下吧
用编程语言来举例可能更好理解一些
比方说, 加 运算符是这样的:
function 加(a,b){ return a+b;}
那么我的目标是做一个这样的运算符:
function 平方(a){return a * a;}
但是实际上id并接触不到这样的操作,只有运算符,所以实际上目标是这样
function 平方(a){return 乘(a,a);}
就是只传入一个参数得到结果

而根据我的测试,管道似乎是这样的:
function 管道(a,b){
  return function(x){
    return b(a(x));
  };
}
输入两个运算符(函数)返回一个运算符(函数)

二元管道是这样的:
function 二元管道(a,b,c){
  return function(x){
     return c(a(x), b(x));
  };
}

也就是说管道只能接受一个输入参数的运算符




作者: 改了网名的人:    时间: 2021-10-20 13:10
Death__123 发表于 2021-9-28 22:25
竟然有别人也来回帖了,那就再解释一下吧
用编程语言来举例可能更好理解一些
比方说, 加 运算符是这样的:

这可能涉及到了id内运算符参数不可复制的特性,
对了,您之前说的“用列表绕一个弯”是怎么做到的
作者: 改了网名的人:    时间: 2021-10-20 13:11
改了网名的人: 发表于 2021-10-20 13:10
这可能涉及到了id内运算符参数不可复制的特性,
对了,您之前说的“用列表绕一个弯”是怎么做到的 ...

如果能做到输入一个列表,输出前两项的积,那就是可解的。




欢迎光临 MC百科社群 (https://bbs.mcmod.cn/) MC百科|最大的MineCraft中文模组百科