网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
成为超级会员,使用一键签到
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
01月25日
漏签
0
天
mathematica吧
关注:
19,731
贴子:
73,621
看贴
图片
吧主推荐
游戏
10
回复贴,共
1
页
<<返回mathematica吧
>0< 加载中...
ReplaceAll有什么有别于F的属性吗?
只看楼主
收藏
回复
江翌日
列表操作
9
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
x = 1;
y = 1;
F[x_, y_] := x + y
F[3, 3] // Trace
他的输出是6。
但是F没有HoldAll Attribute,为什么在F代入3,3之前x+y并未被计算为6呢?(SetDelayed有holdall我清楚,那F没有啊)
ReplaceAll没有HoldAll属性,所以他在模式匹配之前计算了待匹配的式子。
如果我们理解函数为一个模式匹配的话,那么应当是在代入之前函数自己偷偷算一遍才对,可为什么输出不是2而是6呢?
asdasd1dsadsa
小吧主
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
「应当是在代入之前函数自己偷偷算一遍才对」
为什么
asdasd1dsadsa
小吧主
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
楼上提到的「replaceall是先赋全局值计算再赋局部值计算」是错误的,是否先求值再替换,取决于你是否使用延迟规则。
asdasd1dsadsa
小吧主
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
我不清楚你有怎样的误解,不过你可以用DownValues来看看各种情况下系统中所存储的是怎样的定义规则。
xzcyr
吧主
15
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
为避免引发误解,这帖下面错误的回复我全砍了,还请理解。(删帖理由是随便填的。)
xzcyr
吧主
15
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
楼主对函数的工作机制有重大误解。请注意,基于模式匹配的函数定义其实质也是一种模式匹配,它的行为是可以用其他模式匹配函数模拟的,换句话说,如果你不能依照你的解释,把函数定义替换成等效的其他模式匹配函数,那你的解释就有问题。我在
为什么b=a; f[a_]:=b; f[2]不输出2?——...
举了相应的例子,请仔细阅读。
xzcyr
吧主
15
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
还有,解释问题时不要乱用自己也搞不清楚的概念。你是觉得世界上只有OwnValues还是怎么的?
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示