Data update

This commit is contained in:
Ingy döt Net 2025-02-27 18:35:13 -05:00
parent 8e4e15fa56
commit 72eb4943cb
1853 changed files with 35514 additions and 9441 deletions

View file

@ -0,0 +1,8 @@
Bell {(+`´)(𝕩)1}
•Out "First 15 Bell numbers:"
•Show ¨ Bell 15
•Out ""
•Out "First 10 rows of the Bell triangle:"
•Show¨ Bell 10

View file

@ -0,0 +1,51 @@
: triangle-allocate ( u -- addr )
dup 1+ * 2/ cells dup
allocate abort" out of memory"
tuck swap erase ;
: triangle-deallocate ( addr -- )
free abort" memory deallocation error" ;
: triangle-row-address ( addr u -- addr )
dup 1+ * 2/ cells + ;
: bell-triangle-row ( addr u -- )
tuck 1- triangle-row-address
2dup swap cells +
dup 1 cells - @ over !
rot 0 ?do
dup @ >r over @ r> + >r
cell+ r> over !
swap cell+ swap
loop 2drop ;
: bell-triangle ( u -- addr )
dup triangle-allocate
dup 1 swap !
swap 1 ?do
dup i bell-triangle-row
loop ;
: print-bell-numbers ( addr u -- )
0 ?do
dup i triangle-row-address @ . cr
loop drop ;
: print-bell-row ( addr u -- )
tuck triangle-row-address swap
1+ 0 ?do
dup @ . cell+
loop drop cr ;
: main ( -- )
15 bell-triangle
." First 15 Bell numbers:" cr
dup 15 print-bell-numbers cr
." First 10 rows of the Bell triangle:" cr
10 0 do
dup i print-bell-row
loop
triangle-deallocate ;
main
bye

View file

@ -0,0 +1,17 @@
import Data.Ratio ((%), numerator)
infixl 7 *.
(*.) :: Num a => a -> [a] -> [a]
x *. (p:ps) = x*p : x*.ps
instance Num a => Num [a] where
negate = map negate
(+) = zipWith (+)
(*) (p:ps) (q:qs) = p*q : ((p*.qs) + ps*(q:qs))
fromInteger n = fromInteger n:repeat 0
instance (Eq a, Fractional a) => Fractional [a] where
(/) (0:ps) (0:qs) = ps/qs
(/) (p:ps) (q:qs) = let r=p/q in r : (ps - r*.qs)/(q:qs)
fromRational q = fromRational q:repeat 0

View file

@ -0,0 +1,2 @@
expseq :: [Rational] -> [Rational]
expseq ps = zipWith (\p q -> p*fromInteger q) ps (scanl (*) 1 [1..])

View file

@ -0,0 +1,3 @@
infixr 9 |>
(|>) :: (Eq a, Num a) => [a] -> [a] -> [a]
(p:ps) |> (0:qs) = p : qs*(ps |> (0:qs))

View file

@ -0,0 +1,11 @@
exp1 :: [Rational]
exp1 = 0 : map (1%) factorials
where
factorials = scanl (*) 1 [2..]
exps :: [Rational]
exps = 1 : zipWith (*) exps [ 1%n | n <- [1..] ]
bell :: [Integer]
bell = map numerator
(expseq (exps |> exp1))

View file

@ -0,0 +1,4 @@
ghci> take 15 bell
[1,1,2,5,15,52,203,877,4140,21147,115975,678570,4213597,27644437,190899322]
ghci> bell !! 49
10726137154573358400342215518590002633917247281

View file

@ -0,0 +1,16 @@
main :: [sys_message]
main = [Stdout "First 15 and 50th Bell numbers:\n",
Stdout (lay [(rjustify 2 (show i)) ++ ": " ++ show (bell_numbers ! i)
| i <- [1..15] ++ [50]]),
Stdout "\nFirst 10 rows of the Bell triangle:\n",
Stdout (lay [concat [rjustify 7 (show n) | n <- row]
| row <- take 10 bell_triangle])
]
bell_numbers :: [num]
bell_numbers = map last bell_triangle
bell_triangle :: [[num]]
bell_triangle = iterate bell_step [1]
where bell_step row = scan (+) (last row) row

View file

@ -0,0 +1,4 @@
genit(maxx=50)={bell=List();
for(n=0,maxx,q=sum(k=0,n,stirling(n,k,2));
listput(bell,q));bell}
END

View file

@ -0,0 +1,41 @@
$ENTRY Go {
, <BellNumbers 50>: e.Bell (e.B50)
, <First 15 e.Bell>: (e.F15) e.Rest
= <Each (Show) e.F15>
<Show e.B50>
<Each (Prout) <BellTriangle 10>>;
}
Show {
(e.X) = <Prout <Symb e.X>>;
};
BellNumbers {
s.N, <BellTriangle s.N>: e.Rows = <Each (Head) e.Rows>;
};
BellTriangle {
s.N = <BellTriangle <Sub s.N 1> ((1))>;
0 e.T = e.T;
s.N e.Rs (e.R) = <BellTriangle <Sub s.N 1> e.Rs (e.R) (<BellStep e.R>)>;
};
BellStep {
e.Row, e.Row: e.X (e.Last) = <Rsum (e.Last) e.Row>;
};
Rsum {
(Acc e.Acc) = ;
(Acc e.Acc) (e.N) e.Ns, <Add (e.N) e.Acc>: e.N2 =
(e.N2) <Rsum (Acc e.N2) e.Ns>;
e.Ns = <Rsum (Acc 0) e.Ns>;
};
Each {
(e.F) = ;
(e.F) (e.X) e.Xs = (<Mu e.F e.X>) <Each (e.F) e.Xs>;
};
Head {
t.X e.Y = t.X;
};

View file

@ -0,0 +1,31 @@
program bell_numbers;
print("First 15 and 50th Bell numbers:");
b := bell_nums(50);
loop for i in [1..15] with 50 do
print(lpad(str i, 2) + ": " + str b(i));
end loop;
print;
print("First 10 rows of the Bell triangle:");
loop for row in bell_triangle(10) do
print(+/[lpad(str n, 7) : n in row]);
end loop;
proc bell_nums(n);
tri := bell_triangle(n);
return [row(#row) : row in tri];
end proc;
proc bell_triangle(rows);
tri := [[1]];
loop for i in [2..rows] do
row := tri(#tri);
nextrow := [row(#row)];
loop for n in row do
nextrow with:= nextrow(#nextrow) + n;
end loop;
tri with:= nextrow;
end loop;
return tri;
end proc;
end program;