为什么
Import["!python --version", "Text"]
Run Code Online (Sandbox Code Playgroud)
在命令行上工作但不在Mathematica 8(在Mac上运行)的前端工作?
贝壳:
"Python 2.7.1 -- EPD 7.0-2 (64-bit)"
Run Code Online (Sandbox Code Playgroud)
前端:
""
Run Code Online (Sandbox Code Playgroud)
更新:
好的,路径不是(真的)问题,因为
Import["!which python", "Text"]
Run Code Online (Sandbox Code Playgroud)
产量
"/usr/bin/python"
Run Code Online (Sandbox Code Playgroud)
在前端和
"/Library/Frameworks/EPD64.framework/Versions/Current/bin/python"
Run Code Online (Sandbox Code Playgroud)
在shell中(这是我在我的系统上安装的不同的python版本).尽管如此
Import["!/usr/bin/python --version", "Text"]
Run Code Online (Sandbox Code Playgroud)
也不
Import[
"!/Library/Frameworks/EPD64.framework/Versions/Current/bin/python --version",
"Text"]
Run Code Online (Sandbox Code Playgroud)
在前端产生正确的输出.但是在前端和终端版本中使用不同的shell可能会暗示为什么Mathematica行为不端.
是否有一种简单的方法可以让它发挥作用?
text = "";
DialogInput[{TextCell["Try to type a text with linebreaks :-)"],
InputField[Dynamic[text], String],
Button["Ok", DialogReturn[text]]}]
Run Code Online (Sandbox Code Playgroud)
问题是InputField在输入后终止Return.我只想要一个简单的文本输入字段.
我有以下情况:
On[t::shdw]
Message[t::shdw,"t","Foobar","Dork"]
-> t::shdw: Symbol t appears in multiple contexts Foobar; definitions in context Dork may shadow or be shadowed by other definitions. >>
Off[t::shdw]
Message[t::shdw,"t","Foobar","Dork"]
-> **No Warning**
<<MASStoolbox`
-> t::shdw: Symbol t appears in multiple contexts {MASStoolbox`MASS`,Global`}; definitions in context MASStoolbox`MASS` may shadow or be shadowed by other definitions. >>
Run Code Online (Sandbox Code Playgroud)
怎么可能?是否On和Off加载软件包时只影响当前笔记本电脑并没有任何影响?如果是这样,怎么能摆脱像这样的消息呢?如何处理阴影错误?
从Mathematica自己的文档:
{g[1],Hold[g[1]]}/.g[n_]:>n+1
Run Code Online (Sandbox Code Playgroud)
导致
{2, Hold[1 + 1]}
Run Code Online (Sandbox Code Playgroud)
我的问题:有没有办法保护子表达式不被ReplaceAll取代?我使用复合构造作为变量,如
v[a, b]
Run Code Online (Sandbox Code Playgroud)
并希望能够做这样的事情
v[a, b] + a - b /. {a -> x, b -> y}
Run Code Online (Sandbox Code Playgroud)
导致
v[a, b] + x - y
Run Code Online (Sandbox Code Playgroud)
并不是
v[x, y] + x - y
Run Code Online (Sandbox Code Playgroud)
没有复杂的模式.不幸的是,使用替换和级别规范不是选项.
这个成语
v[a, b] + a - b /. {catch_v -> catch, a -> x, b -> y}
Run Code Online (Sandbox Code Playgroud)
因为'catch_v - > catch'禁止后续规则应用于v.但是我宁愿禁止在表达层面上替换(使用某种Hold或HoldForm表达式).这可能吗?
我想重载Mathematica的Set函数(=),这对我来说太棘手了(参见下面的代码示例).我成功地重载了其他函数(例如代码示例中的Reverse).有什么建议?
In[17]:= ClearAll[struct];
In[18]:= var1=struct[{1,2}]
Out[18]= struct[{1,2}]
In[19]:= Reverse@var1
Out[19]= struct[{1,2}]
In[20]:= Head[var1]
Out[20]= struct
In[21]:= struct/:Reverse[stuff_struct]:=struct[Reverse@stuff[[1]]]
In[22]:= Reverse@var1
Out[22]= struct[{2,1}]
In[23]:= struct/:Set[stuff_struct,rhs_]:=Set[struct[[1]],rhs]
In[24]:= var1="Success!"
Out[24]= Success!
In[25]:= var1
Out[25]= Success!
In[26]:= Head[var1]
Out[26]= String
In[27]:= ??struct
Global`struct
Reverse[stuff_struct]^:=struct[Reverse[stuff[[1]]]]
(stuff_struct=rhs_)^:=struct[[1]]=rhs
Run Code Online (Sandbox Code Playgroud) 我在Manipulate使用分配给应该在Manipulate语句中评估的变量的代码时遇到了问题.这是怎么回事......
test1={a,b,c};
Manipulate[test1,{a,0,10,.1},{b,0,10,.1},{c,0,10,.1}]
Run Code Online (Sandbox Code Playgroud)
所以{a, b, c}没有更新.好吧,无论如何,让我们强制执行test1的评估
Manipulate[Evaluate[test1],{a,0,10,.1},{b,0,10,.1},{c,0,10,.1}]
Run Code Online (Sandbox Code Playgroud)

现在它有效.但是如果我想绘制操纵元素的列表,就像这样
Manipulate[ListPlot[Evaluate[test1]],{a,0,10,.1},{b,0,10,.1},{c,0,10,.1}]
Manipulate[Evaluate[ListPlot[test1]],{a,0,10,.1},{b,0,10,.1},{c,0,10,.1}]
Run Code Online (Sandbox Code Playgroud)
我结束了

两个追逐.
我知道在Mathematica的文档中"评估Dynamic或Manipulate中的表达式",但我很确定它不能解决我的问题.