• 【玛沁天气】最新玛沁今天天气,实时提供玛沁气温、空气质量、24小时天气预报、生活指数查询 2019-07-24
  • 安徽快3派奖热销 宿州彩民一天两趟忙兑奖 2019-07-24
  • 宜昌朝天吼景区举行国际龙舟漂流大赛 2019-07-10
  • 中国大学生帆船锦标赛大鹏启航 2019-07-10
  • 党的十九大举行第一场记者招待会 介绍加强党建工作和全面从严治党有关情况 2019-07-02
  • 中华人民共和国安全生产法 2019-07-02
  • 网络司法拍卖若违法 当事人受损可申请国家赔偿 2019-07-01
  • 火箭3巨头计划选詹皇or乔治?泡椒3点更兼容灯泡 2019-07-01
  • 世界30座顶级建筑美轮美奂令人叹服 ——凤凰网房产 2019-06-25
  • 端午假期要来了!收藏这份指南,避开人山人海 2019-06-18
  • 华为新平板!MediaPad M5 将配麒麟 960 2019-06-16
  • 【中国梦·大国工匠篇】鸡蛋上钻孔显真功 潜心坚守一线练就绝活儿 2019-06-11
  • 【理上网来·喜迎十九大】塞尔维亚驻华大使:中国的发展是其他国家望尘莫及的 2019-06-10
  • 六大工程培育发展新动能 2019-06-10
  • 为推动上合组织发展提供中国智慧、中国方案 2019-05-29
  • 批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程
    [批处理文件精品]批处理版照片整理器[批处理文件精品]纯批处理备份&还原驱动在线第三方下载
    返回列表 发帖

    广东11选5开奖记录:[原创代码] [Perl]运算符重载、表达式抽象语法树转有理数求值

    本帖最后由 523066680 于 2019-4-16 12:42 编辑
     广东十一选五计划软件 www.qe-ar.com 
    1. [5, "+", [[3, "-", 9], "/", 7]]
    2. (29/7)
    3. [[[2, "/", 7], "+", 3], "-", [9, "/", 21]]
    4. (20/7)
    复制代码
    其中分数/有理数 有现成的???Math::BigRat 和 Number::Fraction。
    自己实现部分功能可以熟悉一下重载。
    1. =info
    2.     表达式抽象语法树 转 有理数运算
    3.     523066680/vicyang
    4.     2019-04
    5. =cut
    6. use feature 'say';
    7. use Data::Dump qw/dd/;
    8. STDOUT->autoflush(1);
    9. my $exp1 = [ 5, '+', [[ 3, '-', 9 ], '/', 7 ]];
    10. my $exp2 = [[[2,'/',7], '+', 3], '-', [9, '/', 21]];
    11. dd $exp1;
    12. say extract( $exp1, 0 );
    13. dd $exp2;
    14. say extract( $exp2, 0 );
    15. sub extract
    16. {
    17.     my ($exp, $lv) = @_;
    18.     my $ret;
    19.     for my $e ( @{$exp}[0,2] ) {
    20.         $e = ref $e ? extract( $e, $lv+1 ) : fract->new($e, 1);
    21.     }
    22.     eval( "\$ret = \$exp->[0] $exp->[1] \$exp->[2]" );
    23.     return $ret;
    24. }
    25. {
    26.     package fract;
    27.     use overload '+' => \&add, '-' => \&sub,
    28.                  '*' => \&mul, '/' => \&div,
    29.                  q("") => \&as_string; #sub { return $_[0] };
    30.     sub new {
    31.         my ($class, $n, $m) = @_;
    32.         bless [$n, $m], $class;
    33.     }
    34.     sub add {
    35.         my ($a, $b) = @_;
    36.         my $n = $a->[0]*$b->[1] + $b->[0]*$a->[1];
    37.         my $m = $a->[1]*$b->[1];
    38.         return bless [$n, $m], ref($a);
    39.     }
    40.     sub sub {
    41.         my ($a, $b) = @_;
    42.         my $n = $a->[0]*$b->[1] - $b->[0]*$a->[1];
    43.         my $m = $a->[1]*$b->[1];
    44.         return bless [$n, $m], ref($a);
    45.     }
    46.     sub mul {
    47.         my ($a, $b) = @_;
    48.         my $n = $a->[0]*$b->[0];
    49.         my $m = $a->[1]*$b->[1];
    50.         return bless [$n, $m], ref($a);
    51.     }
    52.     sub div {
    53.         my ($a, $b) = @_;
    54.         my $n = $a->[0]*$b->[1];
    55.         my $m = $a->[1]*$b->[0];
    56.         return bless [$n, $m], ref($a);
    57.     }
    58.     sub as_string {
    59.         my ($f) = @_;
    60.         reduce($f);
    61.         return sprintf "(%d/%d)", $f->[0], $f->[1];
    62.     }
    63.     sub reduce {
    64.         my ($f) = @_;
    65.         my ($a, $b) = @$f;
    66.         while ( $b != 0 ) {
    67.             my $t = $b;
    68.             $b = $a % $b;
    69.             $a = $t;
    70.         }
    71.         $f->[0] /= $a;
    72.         $f->[1] /= $a;
    73.     }
    74.     1;
    75. }
    复制代码
    1

    评分人数

    综合型编程论坛
    Writing Code That Nobody Else Can Read.

    返回列表
  • 【玛沁天气】最新玛沁今天天气,实时提供玛沁气温、空气质量、24小时天气预报、生活指数查询 2019-07-24
  • 安徽快3派奖热销 宿州彩民一天两趟忙兑奖 2019-07-24
  • 宜昌朝天吼景区举行国际龙舟漂流大赛 2019-07-10
  • 中国大学生帆船锦标赛大鹏启航 2019-07-10
  • 党的十九大举行第一场记者招待会 介绍加强党建工作和全面从严治党有关情况 2019-07-02
  • 中华人民共和国安全生产法 2019-07-02
  • 网络司法拍卖若违法 当事人受损可申请国家赔偿 2019-07-01
  • 火箭3巨头计划选詹皇or乔治?泡椒3点更兼容灯泡 2019-07-01
  • 世界30座顶级建筑美轮美奂令人叹服 ——凤凰网房产 2019-06-25
  • 端午假期要来了!收藏这份指南,避开人山人海 2019-06-18
  • 华为新平板!MediaPad M5 将配麒麟 960 2019-06-16
  • 【中国梦·大国工匠篇】鸡蛋上钻孔显真功 潜心坚守一线练就绝活儿 2019-06-11
  • 【理上网来·喜迎十九大】塞尔维亚驻华大使:中国的发展是其他国家望尘莫及的 2019-06-10
  • 六大工程培育发展新动能 2019-06-10
  • 为推动上合组织发展提供中国智慧、中国方案 2019-05-29
  • 内蒙古时时彩开奖结果l 七星彩走势图2 诈金花怎样洗牌 重庆快乐10分开奖直播 北京赛车pk10标志 象棋巫师下载 20选5缩水 快乐时时彩官方网址 投注技巧倍投阶梯 体彩山西十一选五走势图贴吧 买彩票正规官方网站 体彩排列3走势 黄大仙香港赛马会论坛 新疆十一选五基本走势图彩票 平码规律三中三免费区