From 20601f5f15fea89de58a4cd87870b88351d6a59f Mon Sep 17 00:00:00 2001 From: Ben Harris Date: Tue, 23 Jul 2019 21:25:20 +0100 Subject: [PATCH] perl: Factor out common features of Vectors and Lists into a superclass. The two classes are identical apart from their names. --- perl/types.pm | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/perl/types.pm b/perl/types.pm index 4eba2b3e..450fee2a 100644 --- a/perl/types.pm +++ b/perl/types.pm @@ -126,10 +126,10 @@ sub _keyword_Q { ((ref $_[0]) =~ /^String/) && ${$_[0]} =~ /^\x{029e}/; } } -# Lists +# Sequences { - package List; + package Sequence; sub new { my $class = shift; bless {'meta'=>$nil, 'val'=>$_[0]}, $class } sub nth { $_[0]->{val}->[$_[1]]; } #sub _val { $_[0]->{val}->[$_[1]]->{val}; } # return value of nth item @@ -137,6 +137,13 @@ sub _keyword_Q { ((ref $_[0]) =~ /^String/) && ${$_[0]} =~ /^\x{029e}/; } sub slice { my @arr = @{$_[0]->{val}}; List->new([@arr[$_[1]..$_[2]]]); } } +# Lists + +{ + package List; + use parent -norequire, 'Sequence'; +} + sub _list_Q { (ref $_[0]) =~ /^List/ } @@ -144,11 +151,7 @@ sub _list_Q { (ref $_[0]) =~ /^List/ } { package Vector; - sub new { my $class = shift; bless {'meta'=>$nil, 'val'=>$_[0]}, $class } - sub nth { $_[0]->{val}->[$_[1]]; } - #sub _val { $_[0]->{val}->[$_[1]]->{val}; } # return value of nth item - sub rest { my @arr = @{$_[0]->{val}}; List->new([@arr[1..$#arr]]); } - sub slice { my @arr = @{$_[0]->{val}}; List->new([@arr[$_[1]..$_[2]]]); } + use parent -norequire, 'Sequence'; } sub _vector_Q { (ref $_[0]) =~ /^Vector/ } -- 2.20.1