我主要使用mathematica作为数学工作台,并编写相对较小的ad-hoc程序.然而,我正在设计一个我打算在Mathematica中编程的系统.我需要将数据存储在树中,并搜索和遍历树.虽然我知道如何实现树,但我更喜欢标准的,经过测试的代码.我在Mathematica用户维基上查看了基本数据结构的类型.我没有找到,尽管Mathematica文档中有一个小例子.
现在问我的问题:
是否有可用的数据结构(开源)包?
您在数据结构方面使用了什么方法?逐步开发自己的util包?
(这不是一个问题,只是一个评论.也许......缺乏(大量可用的)开源软件包是Mathematica没有应有的动力的原因.我害怕鸡/蛋问题.)
在Mathematica编辑器(即笔记本)中,我总是发现最困难的事情之一是当我想要编辑一些长表达式时,在我有机会删除右边之前去除左边的"["某个表达式" ]",单元格中的代码将变得混乱,因为它不再平衡,使得很难追逐,现在悬挂,右端"]"因为它不再在原来的位置!
这是一个简单的例子,假设我们有这个
Text[Row[{PaddedForm[currentTime, {6, 3}, NumberSigns -> {"", ""}, NumberPadding -> {"0", "0"}]}]]
现在说我想删除外部Text []调用.所以我删除了"Text [",在我有机会删除另一方"]之前,笔记本现在会把所有东西都放在一边,很难找到合适的"]".对于长单元(这是demonestrations工作的情况),代码可以大量移动,右边的"]"也可以不在视图中,必须向下滚动并向上查找它.
有没有办法通过选项等设置它,这样当我删除左边的"["时,Mathematica会自动删除匹配的右边"]"?这也适用于"("和")".
对我来说,使用笔记本编辑器确实是个大问题.不能告诉你我花了多少时间看着悬挂的"]".
谢谢 - 纳瑟
我想在mma中制作一个迷你编程语言.从文本文件到包中的模块.理想情况下,我应该能够通过另一个包中的函数从Mathematica中生成包和模块.
问题:这可能吗?我正在寻找一个参考或一个例子来启动它.
编辑:例如:
想象一下具有n个整数类型寄存器的存储体.
说明是:
1 Z(n)
2 C(m,n)
3 J(m,n,q)
4 S(n)
每行都有一个地址.第一行1,第二行2等.Z(n)在寄存器n中存储0.寄存器n中的寄存器m的C(m,n)存储值.J(m,n,q)如果值寄存器m等于寄存器n的值则跳转到地址q的行.S(n)将n加1到寄存器n中的值.
然后给出两个工作程序P和QI想要生成连接程序P + Q.
然后给出两个工作程序P和QI想要在P之后生成替换Q.
最后,我想开始尝试递归...这个'迷你项目'的目的.
我想知道如何一般地做到这一点,最好的策略是什么等等.我已经看到了一些解决方案,其中一些看起来非常难/乏味.我工作的那个使用纯函数来实现对象函数和头像OBJECT [].在类编码方面使用起来非常困难.在定义函数和构造函数时(特别是继承部分很难),我感到头晕目眩.
因此,我的问题的编码是关于类的编码部分的优点.理想情况下,我正在寻找可以如下工作的东西.首先,我们定义一个类,例如汽车如下:
beginClass["vehicle"];
   public startTheEngine;
   private fuel;
   vehicle[args_]:=Block[{},...];
   startTheEngine[thrust_]:=Block[{}...];
endClass
beginClass["car", "vehicle"];
public TurnTheRadioOn;
private frequency;
car[args_] := Block[{...},];
TurnTheRadioOn[]:=
   Block[{},
      use private variable frequency
   ]
endClass;
请注意,私有/公共函数的定义几乎与"普通"mathematica代码一样非常重要.这就是主要要求.
该课程将被用作
car1 = newObject["car", args];
car1.StartTheEngine[];
car1.TurnOnTheRadio[];
我很好奇那个人要考虑什么?为了构建像上面这样的东西可能涉及Mathematica的许多方面,例如如何修复".".语法等.如果您建议现有的软件包,我将不胜感激,如果您可以原则上评论它是如何工作的.
我天真的期望是封装部分可以通过BeginPackage结构修复.所有对象都可以存储在专门为每个类设计的名称空间中.我认为对象看起来像
car1 = OBJECT["car"][fuel$1,frequency$1,....];
car2 = OBJECT["car"][fuel$2,frequency$2,....];
我认为必须构建类似编译器的东西,将上面的类定义代码转换为类.m文件.此外,在某种程度上,第二个主要问题是如何构建这样的编译器.
关心佐兰
ps我之所以问这个问题,是因为我真的需要多次这样的东西.