Skip to content

Commit

Permalink
adding * multiplication primitive
Browse files Browse the repository at this point in the history
  • Loading branch information
fitzgen committed Feb 2, 2010
1 parent df60f74 commit 5019a53
Showing 1 changed file with 15 additions and 0 deletions.
15 changes: 15 additions & 0 deletions scheme.adb
Expand Up @@ -500,6 +500,18 @@ procedure Scheme is
end if;
end;

function Multiply_Proc (Arguments : Access_Object) return Access_Object is
Result : Integer := 1;
Args : Access_Object := Arguments;
begin
loop
exit when Is_The_Empty_List(Args);
Result := Result * Car(Args).all.Data.Int;
Args := Cdr(Args);
end loop;
return Make_Integer(Result);
end;

function Is_Null_Proc (Arguments : Access_Object) return Access_Object is
begin
if Is_The_Empty_List(Car(Arguments)) then
Expand Down Expand Up @@ -627,6 +639,9 @@ procedure Scheme is
Define_Variable(Make_Symbol(To_Unbounded_String("-")),
Make_Primitive_Proc(Sub_Proc'access),
The_Global_Environment);
Define_Variable(Make_Symbol(To_Unbounded_String("*")),
Make_Primitive_Proc(Multiply_Proc'access),
The_Global_Environment);
Define_Variable(Make_Symbol(To_Unbounded_String("null?")),
Make_Primitive_Proc(Is_Null_Proc'access),
The_Global_Environment);
Expand Down

0 comments on commit 5019a53

Please sign in to comment.