Skip to content

Commit

Permalink
- Added the Object.bless() method which returns a blessed object in t…
Browse files Browse the repository at this point in the history
…he self class.

- Minor fix inside the Sidef deparser.
  • Loading branch information
trizen committed Dec 17, 2015
1 parent a3b9102 commit 0603970
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 1 deletion.
2 changes: 1 addition & 1 deletion lib/Sidef/Deparse/Sidef.pm
Original file line number Diff line number Diff line change
Expand Up @@ -297,7 +297,7 @@ package Sidef::Deparse::Sidef {
$statements[-1] = '(' . $statements[-1] . ')';
}

if (@statements == 1 and length($statements[0]) <= 80) {
if (@statements == 1 and length($statements[0]) + $Sidef::SPACES <= 80) {
$code .= " $statements[0] }";
}
else {
Expand Down
5 changes: 5 additions & 0 deletions lib/Sidef/Object/Object.pm
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,11 @@ package Sidef::Object::Object {
Sidef::Types::String::String->new(CORE::ref($obj) || $obj);
}

sub bless {
my ($obj, $arg) = @_;
bless($arg, (CORE::ref($obj) || $obj));
}

sub respond_to {
my ($self, $method) = @_;
Sidef::Types::Bool::Bool->new($self->can($method));
Expand Down
27 changes: 27 additions & 0 deletions scripts/RosettaCode/sieve_of_eratosthenes.sf
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#!/usr/bin/ruby

#
## http://rosettacode.org/wiki/Sieve_of_Eratosthenes#Sidef
#

func sieve_iter(limit) {
var is_prime = [false, false, ([true] * limit-1)...];
gather {
is_prime.each_kv { |number, prime|
if (prime) {
take(number);
number**2 ... limit -> each { |n| is_prime[n] = false if n%%number }
}
}
}
}
func sieve(Number n) { sieve(2..n) }
func sieve(Array a { .first > .last.sqrt }) { a }
func sieve(Array a) { [a[0], sieve(a.grep { !(_ %% a[0]) })...] }

var s1 = sieve_iter(100).join(",");
var s2 = sieve(100).join(",");

say s1;
assert_eq(s1, s2);

0 comments on commit 0603970

Please sign in to comment.