mathematica代码替换变量的vim代码
"在mathematica代码中,把AB=3类型的代码,修改成AB=BA=3,线段长度赋值,AB与BA都赋值,这样两个变量都能用了,这样再不用考虑线段的两个端点哪个在前、哪个在后了,后面使用线段长度变量还能增加代码的可读性"在mathematica代码中,把AB=3类型的代码,修改成AB=BA=3,线段长度赋值,AB与BA都赋值,这样两个变量都能用了,这样再不用考虑线段的两个端点哪个在前、哪个在后了,后面使用线段长度变量还能增加代码的可读性
:menu 259.660 mma.替换变量 :.,$s/\(\(\)\(\)=\)/\1\3\2=/gec<CR>
把这个功能添加到vim的菜单里,从光标所在行替换到最后一行(需要人工确认)
替换前是AB=3这样的代码,
替换后是AB=BA=3这样的代码,
替换时搜索
大写字母大写字母=
这样的模式,
直接点菜单运行这个功能。
代码例子见
https://bbs.emath.ac.cn/forum.php?mod=redirect&goto=findpost&ptid=19966&pid=104959
这样做,不用考虑线段长度变量的变量名两个端点哪个在前、哪个在后了,
后面使用线段长度变量还能增加代码的可读性。
把BA替换成AB,写代码时用到线段长度变量时,AB与BA两个变量随便用,但是写完代码后,再用编辑器的正则替换(写到菜单里)把BA替换成AB,使得顺序小的A在顺序大的B之前,这样写代码用到线段长度变量时,就不用人工费脑筋考虑A与B哪个在前。同时,还要注意不替换ΔBAC与∠BAC中的BA
我准备考虑再升级一下。
添加这个功能
本帖最后由 nyy 于 2025-4-14 09:56 编辑
nyy 发表于 2025-4-13 09:13
把BA替换成AB,写代码时用到线段长度变量时,AB与BA两个变量随便用,但是写完代码后,再用编辑器的正则替换 ...
再次升级功能
"在mathematica代码中,把AB=3类型的代码,修改成AB=BA=3,线段长度赋值,AB与BA都赋值,这样两个变量都能用了,这样再不用考虑线段的两个端点哪个在前、哪个在后了,后面使用线段长度变量还能增加代码的可读性
:menu 259.660 mma.替换变量 :.,$s/\(\(\)\(\)=\)/\1\3\2=/gec<CR>
"在mathematica代码中,替换线段长度变量,比如把BA替换成AB,写代码时用到线段长度变量时,AB与BA两个变量随便用,但是写完代码后,再用编辑器的正则替换(写到菜单里)把BA替换成AB,使得顺序小的A在顺序大的B之前,这样写代码用到线段长度变量时,就不用人工费脑筋考虑A与B哪个在前。同时,还要注意不替换ΔBAC、∠BAC、变量BACD中的BA
:menu 259.661 mma.线段长度变量BA替换成AB :.,$s/\@<!\(\)\(\)\@!/\=(submatch(1)>submatch(2)?submatch(2).submatch(1):submatch(1).submatch(2))/gec<CR>
"在mathematica代码中,把AB=3类型的代码,修改成AB=BA=3,线段长度赋值,AB与BA都赋值,这样两个变量都能用了,这样再不用考虑线段的两个端点哪个在前、哪个在后了,后面使用线段长度变量还能增加代码的可读性
:menu 259.660 mma.替换变量 :.,$s/\(\(\)\(\)=\)/\1\3\2=/gec<CR>
"在mathematica代码中,替换线段长度变量,比如把BA替换成AB,写代码时用到线段长度变量时,AB与BA两个变量随便用,但是写完代码后,再用编辑器的正则替换(写到菜单里)把BA替换成AB,使得顺序小的A在顺序大的B之前,这样写代码用到线段长度变量时,就不用人工费脑筋考虑A与B哪个在前。同时,还要注意不替换ΔBAC、∠BAC、变量BACD中的BA
:menu 259.661 mma.线段长度变量BA替换成AB :.,$s/\@<!\(\)\(\)\@!/\=(submatch(1)>submatch(2)?submatch(2).submatch(1):submatch(1).submatch(2))/gec<CR>
第一种办法,赋值的变量实在是太多,第二种办法,写代码的时候,随便用变量,写玩代码后,再用编辑器修改成唯一的变量(把BA换成AB,这样就不存在AB与BA两个变量了),
第二种办法的好处是略微牺牲一点可读性、略微减少一点可维护性。
我选择把两种办法都保留
第一种代码的最终效果见例子
https://bbs.emath.ac.cn/forum.php?mod=redirect&goto=findpost&ptid=19966&pid=104959
这种办法是引入了AB BAx y a b等变量,变量实在是太多,好处是后面的代码的可读性略微高一点点,但是由于引入了 x y a b等变量,求解结果可读性差一些
这种办法办法在写代码的时候轻松一些,毕竟x变量比AB变量少输入字母
第二种代码的最终效果见例子
https://bbs.emath.ac.cn/forum.php?mod=redirect&goto=findpost&ptid=34199&pid=124781
这种办法的好处是AB BA x y a b等变量,只保留了AB,但是由于删除了BA,所以代码可读性略差一点,但是求解结果可读性比较强
这种办法办法在写代码的时候复杂一些,毕竟AB变量比x变量多输入字母
还有一种办法是
https://bbs.emath.ac.cn/forum.php?mod=redirect&goto=findpost&ptid=20072&pid=105014
这种办法,代码可读性略差一些,但是如果注释写好了,最终还是具有可读性的。 nyy 发表于 2025-4-14 09:33
再次升级功能
"在mathematica代码中,把AB=3类型的代码,修改成AB=BA=3,线段长度赋值,AB与BA都赋值,这样两 ...
第2种办法,比如变量名AB,更具有可读性,
但是有时候字母用多了,需要判定诸如
AD与DA两个变量哪个字母在前,这个时候就会导致
写代码的时候人分心思考这类问题,所以我的第2种办法,
就是让人写代码的时候两个变量随便用,等写完了所有的代码,
用编辑器执行替换,把所有的AB与BA全部执行替换,
全部替换成AB,让字母顺序小的在前,字母顺序大的在后,
这样确保了变量的唯一性,同时又不让人分心思考。
再一次将我的代码升级,
这一次只搜索BA这类变量,找到并替换掉
"在mathematica代码中,把AB=3类型的代码,修改成AB=BA=3,线段长度赋值,AB与BA都赋值,这样两个变量都能用了,这样再不用考虑线段的两个端点哪个在前、哪个在后了,后面使用线段长度变量还能增加代码的可读性
:menu 259.660 mma.线段长度变量AB=3替换成AB=BA=3 :.,$s/\@<!\(\(\)\(\)=\)/\1\3\2=/gec<CR>
"在mathematica代码中,替换线段长度变量,比如把BA替换成AB,写代码时用到线段长度变量时,AB与BA两个变量随便用,但是写完代码后,再用编辑器的正则替换(写到菜单里)把BA替换成AB,使得顺序小的A在顺序大的B之前,这样写代码用到线段长度变量时,就不用人工费脑筋考虑A与B哪个在前。同时,还要注意不替换ΔBAC、∠BAC、变量BACD中的BA
:menu 259.661 mma.线段长度变量BA替换成AB :.,$s/\@<!\(\)\(\)\@!/\=(submatch(1)>submatch(2)?submatch(2).submatch(1):submatch(1).submatch(2))/gec<CR>
"下面的或表达式,是两个\\,至于原因不知道,只搜索BA(也就是第一个字母比第二个字母大的情况,AB这种不搜索)
:menu 259.662 mma.线段长度变量只搜索BA并替换成AB :.,$s/\@<!\(B\\|C\\|D\\|E\\|F\\|G\\|H\\|I\\|J\\|K\\|L\\|M\\|N\\|O\\|P\\|Q\\|R\\|S\\|T\\|U\\|V\\|W\\|X\\|Y\\|Z\)\@!/\=ExchangeIfGreater(submatch(1))/gec<CR>
nyy 发表于 2025-4-17 13:55
再一次将我的代码升级,
这一次只搜索BA这类变量,找到并替换掉
function! ExchangeIfGreater(str)
" 假设输入一定是2个大写字母,省略校验(如需校验可保留len检查)
let c1 = a:str" 第一个字符(如 "BA" 是 'B')
let c2 = a:str" 第二个字符(如 "BA" 是 'A')
" 直接比较字符大小(Vim中字符比较按ASCII顺序,A=65 < B=66 < ... < Z=90)
return c1 > c2 ? c2 . c1 : a:str
endfunction
忘记把这个函数上传上来了
页:
[1]