关于符号的定义和值的问题

2023-11-25

Definition“知道”符号值的定义方式:使用Set or SetDelayed。但如何呢?据我了解,在为符号分配值后,评估器的分配方式没有任何区别:通过使用Set or SetDelayed。可以用函数来说明OwnValues它总是返回定义Head RuleDelayed. How Definiton获得这些信息?

In[1]:= a=5;b:=5;
Definition[a]
Definition[b]
OwnValues[a]

Out[2]= a=5
Out[3]= b:=5
Out[4]= {HoldPattern[a]:>5}

OwnValues[a] = {HoldPattern[a] -> 3}; OwnValues[a] gives {HoldPattern[a] :> 3}代替{HoldPattern[a] -> 3} but Definition[a]展示了人们可以期待什么。可能这个定义在内部以以下形式存储Rule但转换为RuleDelayed by OwnValues用于抑制定义的 r.h.s 的评估。这个假设与我最初的理解相矛盾,我最初的理解是分配的值之间没有区别Set and SetDelayed。这些定义可能以不同的形式存储:Rule and RuleDelayed相应地,但从评估者的角度来看是等效的。

有趣的是看看如何MemoryInUse[]取决于定义的类型。

在下面的实验中我使用了内核数学5.2 在没有前端的交互式会话中。与内核数学6和7会得到不同的结果。原因之一是在这些版本中Set默认情况下是重载的.

首先我评价一下$HistoryLength=0;因为有DownValues for In and Out变量不影响我的结果。但似乎即使当$HistoryLength的值设置为 0In[$Line] for current输入行仍然被存储并在输入新输入后被删除。这可能就是第一次评估结果的原因MemoryInUse[]总是与第二个不同。

这是我得到的:

Mathematica 5.2 学生版:Microsoft Windows 版本

版权所有 1988-2005 Wolfram Research, Inc.

-- 终端图形初始化 --

在[1]中:= $HistoryLength=0;

In[2]:= MemoryInUse[]

输出[2]= 1986704

In[3]:= MemoryInUse[]

输出[3]= 1986760

In[4]:= MemoryInUse[]

输出[4]= 1986760

在[5]中:=a=2;

In[6]:= MemoryInUse[]

输出[6]= 1986848

In[7]:= MemoryInUse[]

输出[7]= 1986824

In[8]:= MemoryInUse[]

输出[8]= 1986824

在[9]:= a:=2;

In[10]:= MemoryInUse[]

输出[10]= 1986976

In[11]:= MemoryInUse[]

输出[11]= 1986952

In[12]:= MemoryInUse[]

输出[12]= 1986952

在[13]中:= a=2;

In[14]:= MemoryInUse[]

输出[14]= 1986848

In[15]:= MemoryInUse[]

输出[15]= 1986824

In[16]:= MemoryInUse[]

输出[16]= 1986824

人们可以看到定义a=2;增加MemoryInUse[]由 1986824-1986760=64 字节。将其替换为定义a:=2;增加MemoryInUse[]1986952-1986824=128 字节。并将后一个定义替换为前一个恢复MemoryInUse[]至 1986824 字节。这意味着延迟定义比立即定义多需要 128 个字节。

当然这个实验并不能证明我的假设。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于符号的定义和值的问题 的相关文章

随机推荐