Skip to content

Instantly share code, notes, and snippets.

@pmcgee69
Last active November 11, 2024 14:23
Show Gist options
  • Save pmcgee69/dfdfda2587ce25503cb414558ca721cf to your computer and use it in GitHub Desktop.
Save pmcgee69/dfdfda2587ce25503cb414558ca721cf to your computer and use it in GitHub Desktop.
Delphi equivalent of Haskell Tree
{$APPTYPE CONSOLE}
program haskell_tree_4;
type
PMyTree = ^MyTree;
MyTree = record
case b:boolean of
false : ( );
true : ( Node : integer;
Left, Right : PMyTree );
end;
const EmptyTree : MyTree = (b:false);
procedure print_tree(t:MyTree; indent:string);
const
gap = ' ';
begin
var indent2 := indent+gap;
if t.b then begin
writeln(indent, t.Node);
write (indent2, 'Left - '); print_tree( t.Left^ , indent2); writeln;
write (indent2, 'Right - '); print_tree( t.Right^, indent2); writeln;
end
else write(indent,'x');
end;
function sum_tree (t:MyTree):integer;
begin
result := 0;
case t.b of
false : exit(0);
true : exit(result + t.Node
+ sum_tree(t.Left^)
+ sum_tree(t.Right^));
end;
end;
function make_tree (i:integer; const l,r:MyTree):MyTree;
begin
with result do begin
b := true;
node := i;
left := @l;
right := @r;
end;
end;
begin
writeln;
var tree1 := make_tree(1, EmptyTree, EmptyTree);
var tree2 := make_tree(2, EmptyTree, tree1);
var tree3 := make_tree(3, make_tree(4, EmptyTree, EmptyTree), tree2);
writeln('Node 3 (Node 4 Empty Empty) (Node 2 Empty (Node 1 Empty Empty))');
writeln;
print_tree( tree3, ''); writeln('Sum : ', sum_tree(tree3));
writeln;
print_tree( tree2, ''); writeln('Sum : ', sum_tree(tree2));
writeln;
print_tree( tree1, ''); writeln('Sum : ', sum_tree(tree1));
writeln;
readln;
end.
@pmcgee69
Copy link
Author

Haskell Tree Code  - Haskell vs Delphi

@pmcgee69
Copy link
Author

Haskell Tree Output

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment