如果我理解正确,现代计算机是以冯·诺依曼架构为模型的.我有时会看到替代方案的参考,但还没有真正看到任何关于非冯诺依曼架构如何组织和运作的非常好的描述.
有没有人有任何例子?替代计算机组织的优点/缺点是什么?
Clojure是一个功能性的lisp,据说它根本不是面向对象的,即使它运行在JVM上,这是一个专为面向对象语言设计的VM.Clojure提供了相同的接口,用于通过将它们抽象到名为seq的接口来迭代列表和向量.甚至可以使用名为ISeq的Java接口在内部实现.这不是面向对象抽象的例子吗?如何声称Clojure不是面向对象的呢?
我想这个问题的必然结果 - 什么时候可以认为多态与面向对象不同?
这两种语言似乎与我非常相似.尽管Python支持实际的类而不是基于原型的类,但Python类与生成包含值和函数的对象的函数没有什么不同,就像在JavaScript中一样.另一方面,JavaScript仅支持浮点数和字符串作为内置数据类型.
这对我来说似乎是相当浅薄的差异,所以除了这些之外,它们之间有什么更重要的区别?
一位C++程序员试图在这里学习Haskell.请原谅这个可能很简单的问题.我想翻译一个代表3D形状的程序.在C++中我有类似的东西:
class Shape {
public:
std::string name;
Vector3d position;
};
class Sphere : public Shape {
public:
float radius;
};
class Prism : public Shape {
public:
float width, height, depth;
};
Run Code Online (Sandbox Code Playgroud)
我试图将其转换为Haskell(使用记录?),这样我就可以拥有一些知道如何操作Shape的函数(比如访问它的名称和位置),以及其他只知道如何操作球体的函数,比如计算基于其位置和半径的东西.
在C++中,成员函数可以只访问这些参数,但我很难弄清楚如何在Haskell中使用记录,类型类或其他方法来执行此操作.
谢谢.
我有一个结构:
typedef struct _n
{
int type;
union {
char *s;
int i;
};
} n;
Run Code Online (Sandbox Code Playgroud)
当我尝试分配复合文字时,例如:
node n1 = {1, 0};
node n2 = {2, "test"};
Run Code Online (Sandbox Code Playgroud)
gcc给了我一些警告,例如:
warning: initialization makes pointer from integer without a cast
warning: initialization from incompatible pointer type
Run Code Online (Sandbox Code Playgroud)
好吧,很明显,编译器不确定我只是为一个可能不明确的类型赋值.但是,即使我尝试更精确地指定:
node n0 = {type: 1, i: 4};
Run Code Online (Sandbox Code Playgroud)
我明白了:
error: unknown field ‘i’ specified in initializer
Run Code Online (Sandbox Code Playgroud)
我已经读过如果我(union <union name>)之前提出i:它可能会有效.但是,我更喜欢拥有一个匿名联盟.有办法吗?
oop ×2
c ×1
c99 ×1
clojure ×1
haskell ×1
inheritance ×1
javascript ×1
jvm ×1
polymorphism ×1
python ×1
semantics ×1
sequences ×1
unions ×1