找回密码
 注册
Simdroid-非首页
查看: 399|回复: 4

[编程进阶] (编程大擂台)Mathematica 面向对象编程

[复制链接]
发表于 2011-8-13 09:50:00 | 显示全部楼层 |阅读模式 来自 北京
本帖最后由 guocong89 于 2011-8-16 11:26 编辑

按:假期看了一本书,叫做《计算机程序的构造与解释》,虽然是讲lisp的,但和mathematica一脉相承。参考书中的精髓,尝试写了一个mathematica 面向对象包,现把相关技术整理一下。

object oriented programming,即面向对象编程,是一种比面向过程编程更具封装性的语法特性。mathematica本身并不适合去开发大型项目,在面向对象编程方面并不没有非常强烈的需求;但是作为一种语法特性,如果能够亲手实现一下,对我们训练使用mathematica也是很有意思的。

思来想去,决定先把自己的实现放一放,为了活跃咱版的气氛,现在举办一个擂台赛。

规则如下:
我给出一段我的程序实现的功能,你们自己按照自己的思路去实现。
根据给出结果的情况给予1~3分的技术加分,如果结果与前面的回帖雷同了,要给出自己的原创性解释。


抓进来抢分吧!我会在一周后给出我的解决方案。

我的代码运行效果:
  1. tom = New[man];
  2. tom["year"] = 1989;
  3. tom["name"] = "tom";
  4. tom["say"][]
  5. tom["age"][]
复制代码
运行结果
  1. My name is tom
  2. I'm 23 year's old
复制代码
这是第一季,后面还有继承的应用。
发表于 2011-8-16 14:11:56 | 显示全部楼层 来自 湖南长沙
Simdroid开发平台
  1. New[man][temp_] := Module[{},
  2.    say[] := Print["My name is ", New[man]["name"]];
  3.    age[] := Print["I'm ", 2012 - New[man]["year"], " years old"];
  4.    If[temp == "say", New[man][] /. New[man] -> say];
  5.    If[temp == "age", New[man][] /. New[man] -> age]];
复制代码
楼主啊,这个2012就要来了,虽然有点出入,但是看在第一个响应你的份上多少给一点分吧:lol 。其实我也特别想知道mathematic面向对象怎么写的,求教LZ了

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2011-8-16 14:22:44 | 显示全部楼层 来自 陕西西安
算是把程序写出来了,可是有一个很严重的问题。如果我有两个man对象,结果是不对的。如果解决了,加1分。

20号公布答案。
回复 不支持

使用道具 举报

发表于 2011-8-19 09:28:05 | 显示全部楼层 来自 北京
玩玩倒是可以的
回复 不支持

使用道具 举报

 楼主| 发表于 2011-8-25 14:17:42 | 显示全部楼层 来自 LAN
很抱歉,前几天在MSRA参加一个夏令营活动,没有来得及公布答案。请见新主题帖关于这个问题的解决。
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-20 17:02 , Processed in 0.040986 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表