Bell numbers: Difference between revisions

18,558 bytes added ,  2 months ago
m
m (→‎{{header|ALGOL W}}: fixed trans)
 
(26 intermediate revisions by 13 users not shown)
Line 35:
{{trans|Python}}
 
<langsyntaxhighlight lang="11l">F bellTriangle(n)
[[BigInt]] tri
L(i) 0 .< n
Line 54:
print(‘The first ten rows of Bell's triangle:’)
L(i) 1..10
print(bt[i])</langsyntaxhighlight>
 
{{out}}
Line 91:
=={{header|Ada}}==
{{works with|GNAT|8.3.0}}
<syntaxhighlight lang="ada">
<lang Ada>
with Ada.Text_IO; use Ada.Text_IO;
procedure Main is
Line 151:
Bell_Numbers;
end Main;
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 188:
{{works with|ALGOL 68G|Any - tested with release 2.8.3.win32}}
Uses Algol 68G's LONG LONG INT to calculate the numbers up to 50. Calculates the numbers using the triangle algorithm but without storing the triangle as a whole - each line of the triangle replaces the previous one.
<langsyntaxhighlight lang="algol68">BEGIN # show some Bell numbers #
PROC show bell = ( INT n, LONG LONG INT bell number )VOID:
print( ( whole( n, -2 ), ": ", whole( bell number, 0 ), newline ) );
Line 208:
FI
OD
END</langsyntaxhighlight>
{{out}}
<pre>
Line 231:
 
=={{header|ALGOL-M}}==
<langsyntaxhighlight lang="algolm">begin
integer function index(row, col);
integer row, col;
Line 266:
end;
end;
end</langsyntaxhighlight>
{{out}}
<pre>First fifteen Bell numbers:
Line 296:
4140.0 5017.0 6097.0 7432.0 9089.0 11155.0 13744.0 17007.0 21147.0
21147.0 25287.0 30304.0 36401.0 43833.0 52922.0 64077.0 77821.0 94828.0 115975.0</pre>
 
=={{header|ALGOL W}}==
{{Trans|ALGOL 68|First 15 numbers only}}
<syntaxhighlight lang="algolw">
begin % show some Bell numbers %
integer MAX_BELL;
MAX_BELL := 15;
begin
procedure showBell ( integer value n, bellNumber ) ;
write( i_w := 2, s_w := 0, n, ": ", i_w := 1, bellNumber );
integer array a ( 0 :: MAX_BELL - 2 );
for i := 1 until MAX_BELL - 2 do a( i ) := 0;
a( 0 ) := 1;
showBell( 1, a( 0 ) );
for n := 0 until MAX_BELL - 2 do begin
% replace a with the next line of the triangle %
a( n ) := a( 0 );
for j := n step -1 until 1 do a( j - 1 ) := a( j - 1 ) + a( j );
showBell( n + 2, a( 0 ) )
end for_n
end
end.
</syntaxhighlight>
{{out}}
<pre>
1: 1
2: 1
3: 2
4: 5
5: 15
6: 52
7: 203
8: 877
9: 4140
10: 21147
11: 115975
12: 678570
13: 4213597
14: 27644437
15: 190899322
</pre>
 
=={{header|APL}}==
{{works with|Dyalog APL}}
<langsyntaxhighlight lang="apl">bell←{
tr←↑(⊢,(⊂⊃∘⌽+0,+\)∘⊃∘⌽)⍣14⊢,⊂,1
⎕←'First 15 Bell numbers:'
Line 305 ⟶ 346:
⎕←'First 10 rows of Bell''s triangle:'
⎕←tr[⍳10;⍳10]
}</langsyntaxhighlight>
{{out}}
<pre>First 15 Bell numbers:
Line 322 ⟶ 363:
 
=={{header|Arturo}}==
 
{{trans|D}}
<syntaxhighlight lang="rebol">bellTriangle: function[n][
 
<lang rebol>bellTriangle: function[n][
tri: map 0..n-1 'x [ map 0..n 'y -> 0 ]
set get tri 1 0 1
Line 345 ⟶ 384:
 
loop 1..10 'i ->
print filter bt\[i] => zero?</langsyntaxhighlight>
 
{{out}}
Line 379 ⟶ 418:
 
=={{header|AutoHotkey}}==
<langsyntaxhighlight AutoHotkeylang="autohotkey">;-----------------------------------
Bell_triangle(maxRows){
row := 1, col := 1, Arr := []
Line 410 ⟶ 449:
return Trim(res, "`n")
}
;-----------------------------------</langsyntaxhighlight>
Examples:<langsyntaxhighlight AutoHotkeylang="autohotkey">MsgBox % Show_Bell_Number(Bell_triangle(15))
MsgBox % Show_Bell_triangle(Bell_triangle(10))
return</langsyntaxhighlight>
{{out}}
<pre>1
Line 441 ⟶ 480:
4140, 5017, 6097, 7432, 9089, 11155, 13744, 17007, 21147
21147, 25287, 30304, 36401, 43833, 52922, 64077, 77821, 94828, 115975</pre>
 
=={{header|BASIC}}==
==={{header|ANSI BASIC}}===
{{trans|QuickBASIC}}
{{works with|Decimal BASIC}}
<syntaxhighlight lang="basic">
100 REM Bell numbers
110 LET MaxN = 14
120 OPTION BASE 0
130 DIM A(13) ! i.e. DIM A(MaxN - 1), ANSI BASIC does not allow expressions in the bound arguments.
140 FOR I = 0 TO MaxN - 1
150 LET A(I) = 0
160 NEXT I
170 LET N = 0
180 LET A(0) = 1
190 PRINT USING "B(##) = #########": N, A(0)
200 DO WHILE N < MaxN
210 LET A(N) = A(0)
220 FOR J = N TO 1 STEP -1
230 LET A(J - 1) = A(J - 1) + A(J)
240 NEXT J
250 LET N = N + 1
260 PRINT USING "B(##) = #########": N, A(0)
270 LOOP
280 END
</syntaxhighlight>
{{out}}
<pre>
B( 0) = 1
B( 1) = 1
B( 2) = 2
B( 3) = 5
B( 4) = 15
B( 5) = 52
B( 6) = 203
B( 7) = 877
B( 8) = 4140
B( 9) = 21147
B(10) = 115975
B(11) = 678570
B(12) = 4213597
B(13) = 27644437
B(14) = 190899322
</pre>
 
==={{header|Applesoft BASIC}}===
{{trans|C}}
<syntaxhighlight lang="gwbasic"> 100 LET ROWS = 15
110 LET M$ = CHR$ (13)
120 LET N = ROWS: GOSUB 500"BELLTRIANGLE"
130 PRINT "FIRST FIFTEEN BELL NUMBERS:"
140 FOR I = 1 TO ROWS
150 LET BR = I:BC = 0: GOSUB 350"GETBELL"
160 HTAB T * 13 + 1
170 PRINT RIGHT$ (" " + STR$ (I),2)": "BV; MID$ (M$,1,T = 2);
180 LET T = T + 1 - (T = 2) * 3
190 NEXT I
200 PRINT M$"THE FIRST TEN ROWS OF BELL'S TRIANGLE:";
210 FOR I = 1 TO 10
220 LET BR = I:BC = 0: GOSUB 350"GETBELL"
230 PRINT M$BV;
240 FOR J = 1 TO I - 1
250 IF I - 1 > = J THEN BR = I:BC = J: GOSUB 350"GETBELL": PRINT " "BV;
260 NEXT J,I
270 END
 
300 LET BI = BR * (BR - 1) / 2 + BC
310 RETURN
 
350 GOSUB 300"BELLINDEX"
360 LET BV = TRI(BI)
370 RETURN
 
400 GOSUB 300"BELLINDEX"
410 LET TRI(BI) = BV
420 RETURN
 
500 DIM TRI(N * (N + 1) / 2)
510 LET BR = 1:BC = 0:BV = 1: GOSUB 400"SETBELL"
520 FOR I = 2 TO N
530 LET BR = I - 1:BC = I - 2: GOSUB 350"GETBELL"
540 LET BR = I:BC = 0: GOSUB 400"SETBELL"
550 FOR J = 1 TO I - 1
560 LET BR = I:BC = J - 1: GOSUB 350"GETBELL":V = BV
570 LET BR = I - 1:BC = J - 1: GOSUB 350"GETBELL"
580 LET BR = I:BC = J:BV = V + BV: GOSUB 400"SETBELL"
590 NEXT J,I
600 RETURN</syntaxhighlight>
 
==={{header|ASIC}}===
{{trans|Delphi}}
Compile with the ''Extended math'' option.
<syntaxhighlight lang="basic">
REM Bell numbers
DIM A&(13)
FOR I = 0 TO 13
A&(I) = 0
NEXT I
N = 0
A&(0) = 1
GOSUB DisplayRow:
WHILE N <= 13
A&(N) = A&(0)
J = N
WHILE J >= 1
JM1 = J - 1
A&(JM1) = A&(JM1) + A&(J)
J = J - 1
WEND
N = N + 1
GOSUB DisplayRow:
WEND
END
 
DisplayRow:
PRINT "B(";
SN$ = STR$(N)
SN$ = RIGHT$(SN$, 2)
PRINT SN$;
PRINT ") =";
PRINT A&(0)
RETURN
</syntaxhighlight>
{{out}}
<pre>
B( 0) = 1
B( 1) = 1
B( 2) = 2
B( 3) = 5
B( 4) = 15
B( 5) = 52
B( 6) = 203
B( 7) = 877
B( 8) = 4140
B( 9) = 21147
B(10) = 115975
B(11) = 678570
B(12) = 4213597
B(13) = 27644437
B(14) = 190899322
</pre>
 
==={{header|Chipmunk Basic}}===
{{works with|Chipmunk Basic|3.6.4}}
{{trans|ASIC}}
<syntaxhighlight lang="qbasic">100 cls
110 dim a(13)
120 for i = 0 to ubound(a) : a(i) = 0 : next i
130 n = 0
140 a(0) = 1
150 displayrow()
160 while n <= ubound(a)
170 a(n) = a(0)
180 j = n
190 while j >= 1
200 jm1 = j-1
210 a(jm1) = a(jm1)+a(j)
220 j = j-1
230 wend
240 n = n+1
250 displayrow()
260 wend
270 end
280 sub displayrow()
290 print "B(";
300 print right$(str$(n),2)") = " a(0)
310 return</syntaxhighlight>
 
==={{header|FreeBASIC}}===
<syntaxhighlight lang="freebasic">#define MAX 21
 
#macro ncp(n, p)
(fact(n)/(fact(p))/(fact(n-p)))
#endmacro
 
dim as ulongint fact(0 to MAX), bell(0 to MAX)
dim as uinteger n=0, k
 
fact(0) = 1
for k=1 to MAX
fact(k) = k*fact(k-1)
next k
 
bell(n) = 1
print n, bell(n)
for n=0 to MAX-1
for k=0 to n
bell(n+1) += ncp(n, k)*bell(k)
next k
print n+1, bell(n+1)
next n</syntaxhighlight>
 
==={{header|GW-BASIC}}===
{{works with|Chipmunk Basic}}
{{works with|PC-BASIC|any}}
{{works with|QBasic}}
{{trans|Chipmunk Basic}}
<syntaxhighlight lang="qbasic">100 CLS
110 DIM A#(13)
120 FOR I = 0 TO UBOUND(A#) : A#(I) = 0 : NEXT I
130 N = 0
140 A#(0) = 1
150 GOSUB 280
160 WHILE N <= 13
170 A#(N) = A#(0)
180 J = N
190 WHILE J >= 1
200 JM1 = J-1
210 A#(JM1) = A#(JM1)+A#(J)
220 J = J-1
230 WEND
240 N = N+1
250 GOSUB 280
260 WEND
270 END
280 REM Display Row
290 PRINT "B(";
300 PRINT RIGHT$(STR$(N),2)") = " A#(0)
310 RETURN</syntaxhighlight>
 
==={{header|MSX Basic}}===
{{trans|Applesoft BASIC}}
<syntaxhighlight lang="qbasic">100 ROWS = 15
110 M$ = CHR$(13)
120 N = ROWS: GOSUB 500
130 PRINT "FIRST FIFTEEN BELL NUMBERS:"
140 FOR I = 1 TO ROWS
150 BR = I: BC = 0: GOSUB 350
160 PRINT RIGHT$(" " + STR$(I),2); ": "; BV; MID$(M$,1,2)
170 T = T + 1 - (T = 2) * 3
180 NEXT I
190 PRINT
200 PRINT "THE FIRST 10 ROWS OF BELL'S TRIANGLE:";
210 FOR I = 1 TO 10
220 BR = I: BC = 0: GOSUB 350
230 PRINT M$: PRINT BV;
240 FOR J = 1 TO I - 1
250 IF I - 1 >= J THEN BR = I: BC = J: GOSUB 350: PRINT BV;
260 NEXT J, I
270 END
300 BI = BR * (BR-1) / 2 + BC
310 RETURN
350 GOSUB 300
360 BV = TRI(BI)
370 RETURN
400 GOSUB 300
410 TRI(BI) = BV
420 RETURN
500 DIM TRI(N * (N+1) / 2)
510 BR = 1: BC = 0: BV = 1: GOSUB 400
520 FOR I = 2 TO N
530 BR = I - 1: BC = I - 2: GOSUB 350
540 BR = I: BC = 0: GOSUB 400
550 FOR J = 1 TO I - 1
560 BR = I: BC = J - 1: GOSUB 350: V = BV
570 BR = I - 1: BC = J - 1: GOSUB 350
580 BR = I: BC = J: BV = V + BV: GOSUB 400
590 NEXT J, I
600 RETURN</syntaxhighlight>
 
==={{header|QuickBASIC}}===
{{works with|QBasic|1.1}}
{{trans|Delphi}}
<syntaxhighlight lang="qbasic">
' Bell numbers
CONST MAXN% = 14
DIM A&(MAXN% - 1)
FOR I% = 0 TO MAXN% - 1
A&(I%) = 0
NEXT I%
N% = 0
A&(0) = 1
PRINT USING "B(##) = #########"; N%; A&(0)
WHILE N% < MAXN%
A&(N%) = A&(0)
FOR J% = N% TO 1 STEP -1
A&(J% - 1) = A&(J% - 1) + A&(J%)
NEXT J%
N% = N% + 1
PRINT USING "B(##) = #########"; N%; A&(0)
WEND
END
</syntaxhighlight>
{{out}}
<pre>
B( 0) = 1
B( 1) = 1
B( 2) = 2
B( 3) = 5
B( 4) = 15
B( 5) = 52
B( 6) = 203
B( 7) = 877
B( 8) = 4140
B( 9) = 21147
B(10) = 115975
B(11) = 678570
B(12) = 4213597
B(13) = 27644437
B(14) = 190899322
</pre>
 
==={{header|RapidQ}}===
{{trans|Delphi}}
{{trans|QuickBASIC|Translated only display statements, the rest is the same.}}
<syntaxhighlight lang="basic">
' Bell numbers
CONST MAXN% = 14
DIM A&(MAXN% - 1)
FOR I% = 0 TO MAXN% - 1
A&(I%) = 0
NEXT I%
N% = 0
A&(0) = 1
PRINT FORMAT$("B(%2d) = %9d", N%, A&(0))
WHILE N% < MAXN%
A&(N%) = A&(0)
FOR J% = N% TO 1 STEP -1
A&(J% - 1) = A&(J% - 1) + A&(J%)
NEXT J%
N% = N% + 1
PRINT FORMAT$("B(%2d) = %9d", N%, A&(0))
WEND
END
</syntaxhighlight>
{{out}}
<pre>
B( 0) = 1
B( 1) = 1
B( 2) = 2
B( 3) = 5
B( 4) = 15
B( 5) = 52
B( 6) = 203
B( 7) = 877
B( 8) = 4140
B( 9) = 21147
B(10) = 115975
B(11) = 678570
B(12) = 4213597
B(13) = 27644437
B(14) = 190899322
</pre>
 
==={{header|Visual Basic .NET}}===
{{trans|C#}}
<syntaxhighlight lang="vbnet">Imports System.Numerics
Imports System.Runtime.CompilerServices
 
Module Module1
 
<Extension()>
Sub Init(Of T)(array As T(), value As T)
If IsNothing(array) Then Return
For i = 0 To array.Length - 1
array(i) = value
Next
End Sub
 
Function BellTriangle(n As Integer) As BigInteger()()
Dim tri(n - 1)() As BigInteger
For i = 0 To n - 1
Dim temp(i - 1) As BigInteger
tri(i) = temp
tri(i).Init(0)
Next
tri(1)(0) = 1
For i = 2 To n - 1
tri(i)(0) = tri(i - 1)(i - 2)
For j = 1 To i - 1
tri(i)(j) = tri(i)(j - 1) + tri(i - 1)(j - 1)
Next
Next
Return tri
End Function
 
Sub Main()
Dim bt = BellTriangle(51)
Console.WriteLine("First fifteen Bell numbers:")
For i = 1 To 15
Console.WriteLine("{0,2}: {1}", i, bt(i)(0))
Next
Console.WriteLine("50: {0}", bt(50)(0))
Console.WriteLine()
Console.WriteLine("The first ten rows of Bell's triangle:")
For i = 1 To 10
Dim it = bt(i).GetEnumerator()
Console.Write("[")
If it.MoveNext() Then
Console.Write(it.Current)
End If
While it.MoveNext()
Console.Write(", ")
Console.Write(it.Current)
End While
Console.WriteLine("]")
Next
End Sub
 
End Module</syntaxhighlight>
{{out}}
<pre>First fifteen Bell numbers:
1: 1
2: 1
3: 2
4: 5
5: 15
6: 52
7: 203
8: 877
9: 4140
10: 21147
11: 115975
12: 678570
13: 4213597
14: 27644437
15: 190899322
50: 10726137154573358400342215518590002633917247281
 
The first ten rows of Bell's triangle:
[1]
[1, 2]
[2, 3, 5]
[5, 7, 10, 15]
[15, 20, 27, 37, 52]
[52, 67, 87, 114, 151, 203]
[203, 255, 322, 409, 523, 674, 877]
[877, 1080, 1335, 1657, 2066, 2589, 3263, 4140]
[4140, 5017, 6097, 7432, 9089, 11155, 13744, 17007, 21147]
[21147, 25287, 30304, 36401, 43833, 52922, 64077, 77821, 94828, 115975]</pre>
 
=={{header|C}}==
{{trans|D}}
<langsyntaxhighlight lang="c">#include <stdio.h>
#include <stdlib.h>
 
Line 500 ⟶ 969:
free(bt);
return 0;
}</langsyntaxhighlight>
 
{{out}}
Line 534 ⟶ 1,003:
=={{header|C sharp|C#}}==
{{trans|D}}
<langsyntaxhighlight lang="csharp">using System;
using System.Numerics;
 
Line 588 ⟶ 1,057:
}
}
}</langsyntaxhighlight>
{{out}}
<pre>First fifteen and fiftieth Bell numbers:
Line 623 ⟶ 1,092:
{{libheader|Boost}}
Requires C++14 or later. If HAVE_BOOST is defined, we use the cpp_int class from Boost so we can display the 50th Bell number, as shown in the output section below.
<langsyntaxhighlight lang="cpp">#include <iostream>
#include <vector>
 
Line 673 ⟶ 1,142:
}
return 0;
}</langsyntaxhighlight>
 
{{out}}
Line 710 ⟶ 1,179:
 
=={{header|CLU}}==
<langsyntaxhighlight lang="clu">bell = cluster is make, get
rep = array[int]
Line 755 ⟶ 1,224:
stream$putc(po, '\n')
end
end start_up</langsyntaxhighlight>
{{out}}
<pre>The first 15 Bell numbers are:
Line 788 ⟶ 1,257:
=={{header|Common Lisp}}==
===via Bell triangle===
<langsyntaxhighlight lang="lisp">;; The triangle is a list of arrays; each array is a
;; triangle's row; the last row is at the head of the list.
(defun grow-triangle (triangle)
Line 848 ⟶ 1,317:
 
(format t "The first 10 rows of Bell triangle:~%")
(print-bell-triangle (make-triangle 10))</langsyntaxhighlight>
{{out}}
<pre>B_0 (first Bell number) = 1
Line 887 ⟶ 1,356:
===via Stirling numbers of the second kind===
This solution's algorithm is substantially slower than the algorithm based on the Bell triangle, because of the many nested loops.
<langsyntaxhighlight lang="lisp">;;; Compute bell numbers analytically
 
;; Compute the factorial
Line 929 ⟶ 1,398:
;; Final invocation
(loop for n in *numbers-to-print* do
(print-bell-number n (bell n)))</langsyntaxhighlight>
{{out}}
<pre>B_0 (first Bell number) = 1
Line 956 ⟶ 1,425:
=={{header|Cowgol}}==
{{trans|C}}
<langsyntaxhighlight lang="cowgol">include "cowgol.coh";
 
typedef B is uint32;
Line 1,023 ⟶ 1,492:
i := i + 1;
print_nl();
end loop;</langsyntaxhighlight>
 
{{out}}
Line 1,058 ⟶ 1,527:
=={{header|D}}==
{{trans|Go}}
<langsyntaxhighlight lang="d">import std.array : uninitializedArray;
import std.bigint;
import std.stdio : writeln, writefln;
Line 1,090 ⟶ 1,559:
writeln(bt[i]);
}
}</langsyntaxhighlight>
{{out}}
<pre>First fifteen and fiftieth Bell numbers:
Line 1,126 ⟶ 1,595:
It shows a way of calculating Bell numbers without using a triangle.
Output numbering is as in the statement of the task, namely B_0 = 1, B_1 = 1, B_2 = 2, ....
<syntaxhighlight lang="delphi">
<lang Delphi>
program BellNumbers;
 
Line 1,138 ⟶ 1,607:
 
const
MAX_INDEXMAX_N = 25; // maximum index of Bell number within the limits of int64
var
n : integer; // index of Bell number
j : integer; // loop variable
a : array [0..MAX_INDEXMAX_N - 1] of int64; // working array to build up B_n
 
{ Subroutine to display that a[0] is the Bell number B_n }
Line 1,155 ⟶ 1,624:
a[0] := 1;
Display(); // some programmers would prefer Display;
while (n < MAX_INDEXMAX_N) do begin // and give begin a line to itself
a[n] := a[0];
for j := n downto 1 do inc( a[j - 1], a[j]);
Line 1,162 ⟶ 1,631:
end;
end.
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 1,192 ⟶ 1,661:
B_25 = 4638590332229999353
</pre>
 
=={{header|EasyLang}}==
{{trans|Julia}}
<syntaxhighlight lang="easylang">
func bell n .
len list[] n
list[1] = 1
for i = 2 to n
for j = 1 to i - 2
list[i - j - 1] += list[i - j]
.
list[i] = list[1] + list[i - 1]
.
return list[n]
.
for i = 1 to 15
print bell i
.
</syntaxhighlight>
 
=={{header|Elixir}}==
<syntaxhighlight lang="elixir">
<lang Elixir>
defmodule Bell do
def triangle(), do: Stream.iterate([1], fn l -> bell_row l, [List.last l] end)
Line 1,211 ⟶ 1,699:
IO.puts "THe first 10 rows of Bell's triangle:"
IO.inspect(Bell.triangle() |> Enum.take(10))
</syntaxhighlight>
</lang>
{{Out}}
<pre>
Line 1,236 ⟶ 1,724:
=={{header|F_Sharp|F#}}==
===The function===
<langsyntaxhighlight lang="fsharp">
// Generate bell triangle. Nigel Galloway: July 6th., 2019
let bell=Seq.unfold(fun g->Some(g,List.scan(+) (List.last g) g))[1I]
</syntaxhighlight>
</lang>
===The Task===
<langsyntaxhighlight lang="fsharp">
bell|>Seq.take 10|>Seq.iter(printfn "%A")
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 1,257 ⟶ 1,745:
[21147; 25287; 30304; 36401; 43833; 52922; 64077; 77821; 94828; 115975]
</pre>
<langsyntaxhighlight lang="fsharp">
bell|>Seq.take 15|>Seq.iter(fun n->printf "%A " (List.head n));printfn ""
</syntaxhighlight>
</lang>
{{out}}
<pre>
1 1 2 5 15 52 203 877 4140 21147 115975 678570 4213597 27644437 190899322
</pre>
<langsyntaxhighlight lang="fsharp">
printfn "%A" (Seq.head (Seq.item 49 bell))
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 1,275 ⟶ 1,763:
===via Aitken's array===
{{works with|Factor|0.98}}
<langsyntaxhighlight lang="factor">USING: formatting io kernel math math.matrices sequences vectors ;
 
: next-row ( prev -- next )
Line 1,287 ⟶ 1,775:
"First 15 Bell numbers:\n%[%d, %]\n\n50th: %d\n\n" printf
"First 10 rows of the Bell triangle:" print
10 aitken [ "%[%d, %]\n" printf ] each</langsyntaxhighlight>
{{out}}
<pre>
Line 1,310 ⟶ 1,798:
This solution makes use of a [https://en.wikipedia.org/wiki/Bell_number#Summation_formulas recurrence relation] involving binomial coefficients.
{{works with|Factor|0.98}}
<langsyntaxhighlight lang="factor">USING: formatting kernel math math.combinatorics sequences ;
 
: next-bell ( seq -- n )
Line 1,319 ⟶ 1,807:
 
50 bells [ 15 head ] [ last ] bi
"First 15 Bell numbers:\n%[%d, %]\n\n50th: %d\n" printf</langsyntaxhighlight>
{{out}}
<pre>
Line 1,330 ⟶ 1,818:
This solution defines Bell numbers in terms of [https://en.wikipedia.org/wiki/Bell_number#Summation_formulas sums of Stirling numbers of the second kind].
{{works with|Factor|0.99 development release 2019-07-10}}
<langsyntaxhighlight lang="factor">USING: formatting kernel math math.extras math.ranges sequences ;
 
: bell ( m -- n )
Line 1,336 ⟶ 1,824:
 
50 [ bell ] { } map-integers [ 15 head ] [ last ] bi
"First 15 Bell numbers:\n%[%d, %]\n\n50th: %d\n" printf</langsyntaxhighlight>
{{out}}
As above.
 
=={{header|FreeBASICFutureBasic}}==
FB does not yet offer native support for Big Ints.
<lang freebasic>#define MAX 21
<syntaxhighlight lang="futurebasic">
local fn BellNumbers( limit as long )
long j, n = 1
mda(0) = 1
printf @"%2llu. %19llu", n, mda_integer(0)
while ( n < limit )
mda(n) = mda(0)
for j = n to 1 step -1
mda(j - 1) = mda_integer(j - 1) + mda_integer(j)
next
n++
printf @"%2llu. %19llu", n, mda_integer(0)
wend
end fn
 
fn BellNumbers( 25 )
#macro ncp(n, p)
(fact(n)/(fact(p))/(fact(n-p)))
#endmacro
 
HandleEvents
dim as ulongint fact(0 to MAX), bell(0 to MAX)
</syntaxhighlight>
dim as uinteger n=0, k
{{output}}
 
<pre>
fact(0) = 1
1. 1
for k=1 to MAX
2. 2
fact(k) = k*fact(k-1)
3. 5
next k
4. 15
 
5. 52
bell(n) = 1
6. 203
print n, bell(n)
7. 877
for n=0 to MAX-1
8. for k=0 to n 4140
9. bell(n+1) += ncp(n, k)*bell(k) 21147
10. 115975
next k
11. 678570
print n+1, bell(n+1)
12. 4213597
next n</lang>
13. 27644437
14. 190899322
15. 1382958545
16. 10480142147
17. 82864869804
18. 682076806159
19. 5832742205057
20. 51724158235372
21. 474869816156751
22. 4506715738447323
23. 44152005855084346
24. 445958869294805289
25. 4638590332229999353
</pre>
 
=={{header|Go}}==
<langsyntaxhighlight lang="go">package main
 
import (
Line 1,401 ⟶ 1,916:
fmt.Println(bt[i])
}
}</langsyntaxhighlight>
 
{{out}}
Line 1,438 ⟶ 1,953:
=={{header|Groovy}}==
{{trans|Java}}
<langsyntaxhighlight lang="groovy">class Bell {
private static class BellTriangle {
private List<Integer> arr
Line 1,495 ⟶ 2,010:
}
}
}</langsyntaxhighlight>
{{out}}
<pre>First fifteen Bell numbers:
Line 1,526 ⟶ 2,041:
=={{header|Haskell}}==
 
<langsyntaxhighlight lang="haskell">bellTri :: [[Integer]]
bellTri =
let f xs = (last xs, xs)
Line 1,541 ⟶ 2,056:
mapM_ print (take 15 bell)
putStrLn "\n50th Bell number:"
print (bell !! 49)</langsyntaxhighlight>
 
{{out}}
Line 1,578 ⟶ 2,093:
And, of course, in terms of ''Control.Arrow'' or ''Control.Applicative'', the triangle function could also be written as:
 
<langsyntaxhighlight lang="haskell">import Control.Arrow
 
bellTri :: [[Integer]]
bellTri = map snd (iterate ((last &&& id) . uncurry (scanl (+))) (1,[1]))</langsyntaxhighlight>
 
or:
 
<langsyntaxhighlight lang="haskell">import Control.Applicative
 
bellTri :: [[Integer]]
bellTri = map snd (iterate ((liftA2 (,) last id) . uncurry (scanl (+))) (1,[1]))</langsyntaxhighlight>
 
or, as an applicative without the need for an import:
<langsyntaxhighlight lang="haskell">bellTri :: [[Integer]]
bellTri = map snd (iterate (((,) . last <*> id) . uncurry (scanl (+))) (1, [1]))</langsyntaxhighlight>
 
=={{header|J}}==
<syntaxhighlight lang="text">
bell=: ([: +/\ (,~ {:))&.>@:{:
 
Line 1,616 ⟶ 2,131:
{:>bell^:49<1x
185724268771078270438257767181908917499221852770
</syntaxhighlight>
</lang>
 
=={{header|Java}}==
{{trans|Kotlin}}
<langsyntaxhighlight lang="java">import java.util.ArrayList;
import java.util.List;
 
Line 1,680 ⟶ 2,195:
}
}
}</langsyntaxhighlight>
{{out}}
<pre>First fifteen Bell numbers:
Line 1,711 ⟶ 2,226:
=={{header|jq}}==
{{trans|Julia}}
<langsyntaxhighlight lang="jq"># nth Bell number
def bell:
. as $n
Line 1,726 ⟶ 2,241:
 
# The task
range(1;51) | bell</langsyntaxhighlight>
{{out}}
For displaying the results, we will first use gojq, the Go implementation of jq, as it supports unbounded-precision integer arithmetic.
Line 1,756 ⟶ 2,271:
=={{header|Julia}}==
Source: Combinatorics at https://github.com/JuliaMath/Combinatorics.jl/blob/master/src/numbers.jl
<langsyntaxhighlight lang="julia">"""
bellnum(n)
Compute the ``n``th Bell number.
Line 1,779 ⟶ 2,294:
for i in 1:50
println(bellnum(i))
end</langsyntaxhighlight>
{{out}}
<pre>
Line 1,836 ⟶ 2,351:
=={{header|Kotlin}}==
{{trans|C}}
<langsyntaxhighlight lang="scala">class BellTriangle(n: Int) {
private val arr: Array<Int>
 
Line 1,887 ⟶ 2,402:
println()
}
}</langsyntaxhighlight>
{{out}}
<pre>First fifteen Bell numbers:
Line 1,920 ⟶ 2,435:
 
In order to handle arrays, a program for the LMC has to modify its own code. This practice is usually frowned on nowadays, but was standard on very early real-life computers, such as EDSAC.
<syntaxhighlight lang="little man computer">
<lang Little Man Computer>
// Little Man Computer, for Rosetta Code.
// Calculate Bell numbers, using a 1-dimensional array and addition.
Line 1,994 ⟶ 2,509:
// Rest of array goes here
// end
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 2,009 ⟶ 2,524:
 
=={{header|Lua}}==
<langsyntaxhighlight lang="lua">-- Bell numbers in Lua
-- db 6/11/2020 (to replace missing original)
 
Line 2,037 ⟶ 2,552:
for i = 1, 10 do
print("[ " .. table.concat(tri[i],", ") .. " ]")
end</langsyntaxhighlight>
{{out}}
<pre>First 15 and 25th Bell numbers:
Line 2,071 ⟶ 2,586:
=={{header|Maple}}==
 
<langsyntaxhighlight lang="maple">bell1:=proc(n)
option remember;
add(binomial(n-1,k)*bell1(k),k=0..n-1)
Line 2,086 ⟶ 2,601:
# [1, 1, 2, 5, 15, 52, 203, 877, 4140, 21147, 115975, 678570,
# 4213597, 27644437, 190899322, 1382958545, 10480142147,
# 82864869804, 682076806159, 5832742205057, 51724158235372]</langsyntaxhighlight>
 
=={{header|Mathematica}} / {{header|Wolfram Language}}==
'''Function definition:'''
<syntaxhighlight lang="mathematica">
<lang Mathematica>
BellTriangle[n_Integer?Positive] := NestList[Accumulate[# /. {a___, b_} :> {b, a, b}] &, {1}, n - 1];
BellNumber[n_Integer] := BellTriangle[n][[n, 1]];
</syntaxhighlight>
</lang>
 
'''Output:'''
<syntaxhighlight lang="mathematica">
<lang Mathematica>
In[51]:= Array[BellNumber, 25]
 
Line 2,111 ⟶ 2,626:
6097, 7432, 9089, 11155, 13744, 17007, 21147}, {21147, 25287, 30304,
36401, 43833, 52922, 64077, 77821, 94828, 115975}}
</syntaxhighlight>
</lang>
 
=={{header|Maxima}}==
It exists in Maxima the belln built-in function.
 
Below is another way
<syntaxhighlight lang="maxima">
/* Subfactorial numbers */
subfactorial(n):=block(
subf[0]:1,
subf[n]:n*subf[n-1]+(-1)^n,
subf[n])$
 
/* Bell numbers implementation */
my_bell(n):=if n=0 then 1 else block(
makelist((1/((n-1)!))*subfactorial(j)*binomial(n-1,j)*(n-j)^(n-1),j,0,n-1),
apply("+",%%))$
 
/* First 50 */
block(
makelist(my_bell(u),u,0,49),
table_form(%%));
</syntaxhighlight>
{{out}}
<pre>
matrix(
[1],
[1],
[2],
[5],
[15],
[52],
[203],
[877],
[4140],
[21147],
[115975],
[678570],
[4213597],
[27644437],
[190899322],
[1382958545],
[10480142147],
[82864869804],
[682076806159],
[5832742205057],
[51724158235372],
[474869816156751],
[4506715738447323],
[44152005855084346],
[445958869294805289],
[4638590332229999353],
[49631246523618756274],
[545717047936059989389],
[6160539404599934652455],
[71339801938860275191172],
[846749014511809332450147],
[10293358946226376485095653],
[128064670049908713818925644],
[1629595892846007606764728147],
[21195039388640360462388656799],
[281600203019560266563340426570],
[3819714729894818339975525681317],
[52868366208550447901945575624941],
[746289892095625330523099540639146],
[10738823330774692832768857986425209],
[157450588391204931289324344702531067],
[2351152507740617628200694077243788988],
[35742549198872617291353508656626642567],
[552950118797165484321714693280737767385],
[8701963427387055089023600531855797148876],
[139258505266263669602347053993654079693415],
[2265418219334494002928484444705392276158355],
[37450059502461511196505342096431510120174682],
[628919796303118415420210454071849537746015761],
[10726137154573358400342215518590002633917247281]
)
</pre>
 
=={{header|Modula-2}}==
{{trans|QuickBASIC}}
{{works with|ADW Modula-2|any (Compile with the linker option ''Console Application'').}}
<syntaxhighlight lang="modula2">
MODULE BellNumbers;
 
FROM STextIO IMPORT
WriteLn, WriteString;
FROM SWholeIO IMPORT
WriteInt;
 
CONST
MaxN = 14;
 
VAR
A: ARRAY [0 .. MaxN - 1] OF CARDINAL;
I, J, N: CARDINAL;
 
PROCEDURE DisplayRow(N, BellNum: CARDINAL);
BEGIN
WriteString("B(");
WriteInt(N, 2);
WriteString(") = ");
WriteInt(BellNum, 9);
WriteLn
END DisplayRow;
 
BEGIN
FOR I := 0 TO MaxN - 1 DO
A[I] := 0
END;
N := 0;
A[0] := 1;
DisplayRow(N, A[0]);
WHILE N < MaxN DO
A[N] := A[0];
FOR J := N TO 1 BY -1 DO
A[J - 1] := A[J - 1] + A[J]
END;
N := N + 1;
DisplayRow(N, A[0])
END
END BellNumbers.
</syntaxhighlight>
{{out}}
<pre>
B( 0) = 1
B( 1) = 1
B( 2) = 2
B( 3) = 5
B( 4) = 15
B( 5) = 52
B( 6) = 203
B( 7) = 877
B( 8) = 4140
B( 9) = 21147
B(10) = 115975
B(11) = 678570
B(12) = 4213597
B(13) = 27644437
B(14) = 190899322
</pre>
 
=={{header|Nim}}==
===Using Recurrence relation===
<langsyntaxhighlight Nimlang="nim">import math
 
iterator b(): int =
Line 2,142 ⟶ 2,797:
inc i
if i > Limit:
break</langsyntaxhighlight>
 
{{out}}
Line 2,174 ⟶ 2,829:
 
===Using Bell triangle===
<langsyntaxhighlight Nimlang="nim">iterator b(): int =
## Iterator yielding the bell numbers.
var row = @[1]
Line 2,184 ⟶ 2,839:
for i in 1..newRow.high:
newRow[i] = newRow[i - 1] + row[i - 1]
row.shallowCopy = move(newRow)
yield row[^1] # The last value of the row is one step ahead of the first one.
 
Line 2,196 ⟶ 2,851:
for i in 1..newRow.high:
newRow[i] = newRow[i - 1] + row[i - 1]
row.shallowCopy = move(newRow)
yield row
 
Line 2,224 ⟶ 2,879:
echo line
if i == 10:
break</langsyntaxhighlight>
 
{{out}}
Line 2,266 ⟶ 2,921:
4140 5017 6097 7432 9089 11155 13744 17007 21147
21147 25287 30304 36401 43833 52922 64077 77821 94828 115975</pre>
 
=={{header|PARIGP}}==
From the code at OEIS A000110,
<syntaxhighlight lang="text">
genit(maxx=50)={bell=List();
for(n=0,maxx,q=sum(k=0,n,stirling(n,k,2));
listput(bell,q));bell}
END</langsyntaxhighlight>
'''Output:'''
<nowiki>List([1, 1, 2, 5, 15, 52, 203, 877, 4140, 21147, 115975, 678570, 4213597, 27644437, 190899322, 1382958545, 10480142147, 82864869804, 682076806159, 5832742205057, 51724158235372, 474869816156751, 4506715738447323, 44152005855084346, 445958869294805289, 4638590332229999353, 49631246523618756274, 545717047936059989389, 6160539404599934652455, 71339801938860275191172, 846749014511809332450147, 10293358946226376485095653, 128064670049908713818925644, 1629595892846007606764728147, 21195039388640360462388656799, 281600203019560266563340426570, 3819714729894818339975525681317, 52868366208550447901945575624941, 746289892095625330523099540639146, 10738823330774692832768857986425209, 157450588391204931289324344702531067, 2351152507740617628200694077243788988, 35742549198872617291353508656626642567, 552950118797165484321714693280737767385, 8701963427387055089023600531855797148876, 139258505266263669602347053993654079693415, 2265418219334494002928484444705392276158355, 37450059502461511196505342096431510120174682, 628919796303118415420210454071849537746015761, 10726137154573358400342215518590002633917247281, 185724268771078270438257767181908917499221852770])</nowiki>
Line 2,279 ⟶ 2,935:
{{Works with|Free Pascal}}
Using bell's triangle. TIO.RUN up to 5000.See talk for more.
<langsyntaxhighlight lang="pascal">program BellNumbers;
{$Ifdef FPC}
{$optimization on,all}
Line 2,399 ⟶ 3,055:
BellNumbersUint64(True);BellNumbersUint64(False);
BellNumbersMPInteger;
END.</langsyntaxhighlight>
{{out}}
<pre style="height:180px">
Line 2,501 ⟶ 3,157:
=={{header|Perl}}==
{{trans|Raku}}
<langsyntaxhighlight lang="perl">use strict 'vars';
use warnings;
use feature 'say';
Line 2,522 ⟶ 3,178:
 
say "\nFirst ten rows of Aitken's array:";
printf '%-7d'x@{$Aitkens[$_]}."\n", @{$Aitkens[$_]} for 0..9;</langsyntaxhighlight>
{{out}}
<pre>First fifteen and fiftieth Bell numbers:
Line 2,558 ⟶ 3,214:
{{libheader|Phix/mpfr}}
Started out as a translation of Go, but the main routine has now been completely replaced.
<!--<langsyntaxhighlight Phixlang="phix">(phixonline)-->
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
<span style="color: #008080;">include</span> <span style="color: #004080;">mpfr</span><span style="color: #0000FF;">.</span><span style="color: #000000;">e</span>
Line 2,588 ⟶ 3,244:
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%s\n"</span><span style="color: #0000FF;">,{</span><span style="color: #7060A8;">join</span><span style="color: #0000FF;">(</span><span style="color: #000000;">bt</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">])})</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<!--</langsyntaxhighlight>-->
{{out}}
<pre>
Line 2,611 ⟶ 3,267:
'''First 18 Bell numbers and b(50).'''
(Port of the Sage solution at the OEIS A000110 page.)
<langsyntaxhighlight Picatlang="picat">main =>
B50=b(50),
println(B50[1..18]),
Line 2,628 ⟶ 3,284:
end,
R := R ++ [A[1]]
end.</langsyntaxhighlight>
 
{{out}}
Line 2,636 ⟶ 3,292:
'''Bell's Triangle (and the 50th Bell number)'''
{{trans|D}}
<langsyntaxhighlight Picatlang="picat">main =>
Tri = tri(50),
foreach(I in 1..10)
Line 2,658 ⟶ 3,314:
Tri[I,J] := Tri[I,J-1] + Tri[I-1,J-1]
end
end.</langsyntaxhighlight>
 
{{out}}
Line 2,675 ⟶ 3,331:
 
{{trans|Prolog}}
<langsyntaxhighlight Picatlang="picat">main :-
bell(49, Bell),
printf("First 15 Bell numbers:\n"),
Line 2,719 ⟶ 3,375:
print_bell_row([Number|Numbers]):-
printf("%w ", Number),
print_bell_row(Numbers).</langsyntaxhighlight>
 
{{out}}
Line 2,752 ⟶ 3,408:
4140 5017 6097 7432 9089 11155 13744 17007 21147
21147 25287 30304 36401 43833 52922 64077 77821 94828 115975</pre>
 
===Constraint modelling: construct (and count) the sets===
This model creates the underlying structure of the sets, and for N=1..4 it also converts and show the proper sets.
 
What the constraint model really creates is the following for N=3:
[[1,1,1],[1,1,2],[1,2,1],[1,2,2],[1,2,3]]
where the i'th value in a (sub) list indicates which set it belongs to.
E.g. the list
[1,2,1]
indicates that both 1 and 3 belongs to the first set, and 2 belongs to the second set, i.e.
{{1,3},{2}, {}}
and after the empty lists are removed:
{{1,3},{2}}
 
The full set is converted to
{{{1,2,3}},{{1,2},{3}},{{1,3},{2}},{{1},{2,3}},{{1},{2},{3}}}
 
The symmetry constraint <code>value_precede_chain/2</code> ensures that a value N+1 is not placed in the list (X) before all the values 1..N has been placed ("seen") in the list. This handles the symmetry that the two sets {1,2} and {2,1} are to be considered the same.
<syntaxhighlight lang="picat">import cp.
 
main =>
member(N,1..10),
X = new_list(N),
X :: 1..N,
value_precede_chain(1..N,X),
solve_all($[ff,split],X)=All,
println(N=All.len),
if N <= 4 then
% convert to sets
Set = {},
foreach(Y in All)
L = new_array(N),
bind_vars(L,{}),
foreach(I in 1..N)
L[Y[I]] := L[Y[I]] ++ {I}
end,
Set := Set ++ { {E : E in L, E != {}} }
end,
println(Set)
end,
nl,
fail,
nl.
 
%
% Ensure that a value N+1 is placed in the list X not before
% all the value 1..N are placed in the list.
%
value_precede_chain(C, X) =>
foreach(I in 2..C.length)
value_precede(C[I-1], C[I], X)
end.
 
value_precede(S,T,X) =>
XLen = X.length,
B = new_list(XLen+1),
B :: 0..1,
foreach(I in 1..XLen)
Xis #= (X[I] #= S),
(Xis #=> (B[I+1] #= 1))
#/\ ((#~ Xis #= 1) #=> (B[I] #= B[I+1]))
#/\ ((#~ B[I] #= 1) #=> (X[I] #!= T))
end,
B[1] #= 0.</syntaxhighlight>
 
{{out}}
<pre>1 = 1
{{{1}}}
 
2 = 2
{{{1,2}},{{1},{2}}}
 
3 = 5
{{{1,2,3}},{{1,2},{3}},{{1,3},{2}},{{1},{2,3}},{{1},{2},{3}}}
 
4 = 15
{{{1,2,3,4}},{{1,2,3},{4}},{{1,2,4},{3}},{{1,2},{3,4}},{{1,2},{3},{4}},{{1,3,4},{2}},{{1,3},{2,4}},{{1,3},{2},{4}},{{1,4},{2,3}},{{1},{2,3,4}},{{1},{2,3},{4}},{{1,4},{2},{3}},{{1},{2,4},{3}},{{1},{2},{3,4}},{{1},{2},{3},{4}}}
 
5 = 52
 
6 = 203
 
7 = 877
 
8 = 4140
 
9 = 21147
 
10 = 115975</pre>
 
=={{header|PicoLisp}}==
<langsyntaxhighlight PicoLisplang="picolisp">(de bell (N)
(make
(setq L (link (list 1)))
Line 2,771 ⟶ 3,516:
(prinl "First ten rows:")
(for N 10
(println (get L N)) )</langsyntaxhighlight>
{{out}}
<pre>
Line 2,806 ⟶ 3,551:
=={{header|Prolog}}==
{{works with|SWI Prolog}}
<langsyntaxhighlight lang="prolog">bell(N, Bell):-
bell(N, Bell, [], _).
 
Line 2,850 ⟶ 3,595:
writef('\n50th Bell number: %w\n', [Number]),
writef('\nFirst 10 rows of Bell triangle:\n'),
print_bell_rows(Bell, 10).</langsyntaxhighlight>
 
{{out}}
Line 2,890 ⟶ 3,635:
{{trans|D}}
{{Works with|Python|2.7}}
<langsyntaxhighlight lang="python">def bellTriangle(n):
tri = [None] * n
for i in xrange(n):
Line 2,912 ⟶ 3,657:
print bt[i]
 
main()</langsyntaxhighlight>
{{out}}
<pre>First fifteen and fiftieth Bell numbers:
Line 2,947 ⟶ 3,692:
{{Trans|Haskell}}
{{Works with|Python|3.7}}
<langsyntaxhighlight lang="python">'''Bell numbers'''
 
from itertools import accumulate, chain, islice
Line 3,144 ⟶ 3,889:
# MAIN ---
if __name__ == '__main__':
main()</langsyntaxhighlight>
{{Out}}
<pre>First fifteen Bell numbers:
Line 3,180 ⟶ 3,925:
=={{header|Quackery}}==
 
<langsyntaxhighlight Quackerylang="quackery"> [ ' [ [ 1 ] ] ' [ 1 ]
rot 1 - times
[ dup -1 peek nested
Line 3,198 ⟶ 3,943:
cr cr
say "First ten rows of Bell's triangle:" cr
10 bell's-triangle witheach [ echo cr ]</langsyntaxhighlight>
 
{{out}}
Line 3,223 ⟶ 3,968:
=={{header|Racket}}==
 
<langsyntaxhighlight lang="racket">#lang racket
 
(define (build-bell-row previous-row)
Line 3,248 ⟶ 3,993:
(map bell-number (range 15))
(bell-number 50)
(bell-triangle 10))</langsyntaxhighlight>
 
{{out}}
Line 3,272 ⟶ 4,017:
{{works with|Rakudo|2019.03}}
 
<syntaxhighlight lang="raku" perl6line> my @Aitkens-array = lazy [1], -> @b {
my @c = @b.tail;
@c.push: @b[$_] + @c[$_] for ^@b;
Line 3,284 ⟶ 4,029:
 
say "\nFirst ten rows of Aitken's array:";
.say for @Aitkens-array[^10];</langsyntaxhighlight>
{{out}}
<pre>First fifteen and fiftieth Bell numbers:
Line 3,319 ⟶ 4,064:
{{works with|Rakudo|2019.03}}
 
<syntaxhighlight lang="raku" perl6line>sub binomial { [*] ($^n … 0) Z/ 1 .. $^p }
 
my @bell = 1, -> *@s { [+] @s »*« @s.keys.map: { binomial(@s-1, $_) } } … *;
 
.say for @bell[^15], @bell[50 - 1];</langsyntaxhighlight>
{{out}}
<pre>(1 1 2 5 15 52 203 877 4140 21147 115975 678570 4213597 27644437 190899322)
Line 3,331 ⟶ 4,076:
{{works with|Rakudo|2019.03}}
 
<syntaxhighlight lang="raku" perl6line>my @Stirling_numbers_of_the_second_kind =
(1,),
{ (0, |@^last) »+« (|(@^last »*« @^last.keys), 0) } … *
Line 3,337 ⟶ 4,082:
my @bell = @Stirling_numbers_of_the_second_kind.map: *.sum;
 
.say for @bell.head(15), @bell[50 - 1];</langsyntaxhighlight>
{{out}}
<pre>(1 1 2 5 15 52 203 877 4140 21147 115975 678570 4213597 27644437 190899322)
Line 3,351 ⟶ 4,096:
 
Also, see this task's &nbsp; [https://rosettacode.org/wiki/Talk:Bell_numbers#size_of_Bell_numbers ''discussion''] &nbsp; to view how the sizes of Bell numbers increase in relation to its index.
<langsyntaxhighlight lang="rexx">/*REXX program calculates and displays a range of Bell numbers (index starts at zero).*/
parse arg LO HI . /*obtain optional arguments from the CL*/
if LO=='' & HI=="" then do; LO=0; HI=14; end /*Not specified? Then use the default.*/
Line 3,374 ⟶ 4,119:
/*──────────────────────────────────────────────────────────────────────────────────────*/
fact: procedure expose !.; parse arg x; if !.x\==. then return !.x; != 1
do f=2 for x-1; != ! * f; end; !.x= !; return !</langsyntaxhighlight>
{{out|output|text=&nbsp; when using the internal default inputs of: &nbsp; &nbsp; <tt> 0 &nbsp; 14 </tt>}}
<pre>
Line 3,397 ⟶ 4,142:
Bell(49) = 10,726,137,154,573,358,400,342,215,518,590,002,633,917,247,281
</pre>
 
=={{header|RPL}}==
{{works with|HP|48}}
≪ → n
≪ { 1 }
'''WHILE''' 'n' DECR '''REPEAT'''
DUP DUP SIZE GET 1 →LIST
1 3 PICK SIZE '''FOR''' j
OVER j GET OVER j GET + +
'''NEXT''' SWAP DROP
'''END''' HEAD
≫ ≫ ‘<span style="color:blue">BELL</span>’ STO
 
'''Variant with a better use of the stack'''
 
Slightly faster then, although more wordy:
≪ → n
≪ { 1 } 1
'''WHILE''' 'n' DECR '''REPEAT'''
DUP 1 →LIST
1 4 PICK SIZE '''FOR''' j
3 PICK j GET ROT + SWAP OVER +
'''NEXT''' ROT DROP SWAP
'''END''' DROP HEAD
≫ ≫ ‘<span style="color:blue">BELL</span>’ STO
 
≪ {} 1 15 '''FOR''' n n <span style="color:blue">BELL</span> + '''NEXT''' ≫ EVAL
{{out}}
<pre>
1: { 1 1 2 5 15 52 203 877 4140 21147 115975 678570 4213597 27644437 190899322 }
</pre>
It makes no sense to display 10 rows of the Bell triangle on a screen limited to 22 characters and 7 lines in the best case.
 
=={{header|Ruby}}==
{{trans|D}}
<langsyntaxhighlight lang="ruby">def bellTriangle(n)
tri = Array.new(n)
for i in 0 .. n - 1 do
Line 3,433 ⟶ 4,210:
end
 
main()</langsyntaxhighlight>
{{out}}
<pre>First fifteen and fiftieth Bell numbers:
Line 3,468 ⟶ 4,245:
{{trans|D}}
{{libheader|num|0.2}}
<langsyntaxhighlight lang="rust">use num::BigUint;
 
fn main() {
Line 3,499 ⟶ 4,276:
tri
}
</syntaxhighlight>
</lang>
 
{{out}}
Line 3,523 ⟶ 4,300:
=={{header|Scala}}==
{{trans|Java}}
<langsyntaxhighlight lang="scala">import scala.collection.mutable.ListBuffer
 
object BellNumbers {
Line 3,582 ⟶ 4,359:
}
}
}</langsyntaxhighlight>
{{out}}
<pre>First fifteen Bell numbers:
Line 3,612 ⟶ 4,389:
=={{header|Scheme}}==
{{works with|Chez Scheme}}
<langsyntaxhighlight lang="scheme">; Given the remainder of the previous row and the final cons of the current row,
; extend (in situ) the current row to be a complete row of the Bell triangle.
; Return the final value in the extended row (for use in computing the following row).
Line 3,659 ⟶ 4,436:
(eleloop (cdr rowlist))))
(newline)
(rowloop (cdr triangle))))</langsyntaxhighlight>
{{out}}
<pre>The Bell numbers:
Line 3,700 ⟶ 4,477:
=={{header|Sidef}}==
Built-in:
<langsyntaxhighlight lang="ruby">say 15.of { .bell }</langsyntaxhighlight>
 
Formula as a sum of Stirling numbers of the second kind:
<langsyntaxhighlight lang="ruby">func bell(n) { sum(0..n, {|k| stirling2(n, k) }) }</langsyntaxhighlight>
 
Via Aitken's array (optimized for space):
<langsyntaxhighlight lang="ruby">func bell_numbers (n) {
 
var acc = []
Line 3,722 ⟶ 4,499:
var B = bell_numbers(50)
say "The first 15 Bell numbers: #{B.first(15).join(', ')}"
say "The fiftieth Bell number : #{B[50-1]}"</langsyntaxhighlight>
{{out}}
<pre>
Line 3,730 ⟶ 4,507:
 
Aitken's array:
<langsyntaxhighlight lang="ruby">func aitken_array (n) {
 
var A = [1]
Line 3,739 ⟶ 4,516:
}
 
aitken_array(10).each { .say }</langsyntaxhighlight>
{{out}}
<pre>
Line 3,755 ⟶ 4,532:
 
Aitken's array (recursive definition):
<langsyntaxhighlight lang="ruby">func A((0), (0)) { 1 }
func A(n, (0)) { A(n-1, n-1) }
func A(n, k) is cached { A(n, k-1) + A(n-1, k-1) }
Line 3,761 ⟶ 4,538:
for n in (^10) {
say (0..n -> map{|k| A(n, k) })
}</langsyntaxhighlight>
 
(same output as above)
Line 3,769 ⟶ 4,546:
{{trans|Kotlin}}
 
<langsyntaxhighlight lang="swift">public struct BellTriangle<T: BinaryInteger> {
@usableFromInline
var arr: [T]
Line 3,811 ⟶ 4,588:
 
print()
}</langsyntaxhighlight>
 
{{out}}
Line 3,842 ⟶ 4,619:
21147, 25287, 30304, 36401, 43833, 52922, 64077, 77821, 94828, 115975</pre>
 
=={{header|VisualV Basic .NET(Vlang)}}==
{{trans|C#}}
<lang vbnet>Imports System.Numerics
Imports System.Runtime.CompilerServices
 
Module Module1
 
<Extension()>
Sub Init(Of T)(array As T(), value As T)
If IsNothing(array) Then Return
For i = 0 To array.Length - 1
array(i) = value
Next
End Sub
 
Function BellTriangle(n As Integer) As BigInteger()()
Dim tri(n - 1)() As BigInteger
For i = 0 To n - 1
Dim temp(i - 1) As BigInteger
tri(i) = temp
tri(i).Init(0)
Next
tri(1)(0) = 1
For i = 2 To n - 1
tri(i)(0) = tri(i - 1)(i - 2)
For j = 1 To i - 1
tri(i)(j) = tri(i)(j - 1) + tri(i - 1)(j - 1)
Next
Next
Return tri
End Function
 
Sub Main()
Dim bt = BellTriangle(51)
Console.WriteLine("First fifteen Bell numbers:")
For i = 1 To 15
Console.WriteLine("{0,2}: {1}", i, bt(i)(0))
Next
Console.WriteLine("50: {0}", bt(50)(0))
Console.WriteLine()
Console.WriteLine("The first ten rows of Bell's triangle:")
For i = 1 To 10
Dim it = bt(i).GetEnumerator()
Console.Write("[")
If it.MoveNext() Then
Console.Write(it.Current)
End If
While it.MoveNext()
Console.Write(", ")
Console.Write(it.Current)
End While
Console.WriteLine("]")
Next
End Sub
 
End Module</lang>
{{out}}
<pre>First fifteen Bell numbers:
1: 1
2: 1
3: 2
4: 5
5: 15
6: 52
7: 203
8: 877
9: 4140
10: 21147
11: 115975
12: 678570
13: 4213597
14: 27644437
15: 190899322
50: 10726137154573358400342215518590002633917247281
 
The first ten rows of Bell's triangle:
[1]
[1, 2]
[2, 3, 5]
[5, 7, 10, 15]
[15, 20, 27, 37, 52]
[52, 67, 87, 114, 151, 203]
[203, 255, 322, 409, 523, 674, 877]
[877, 1080, 1335, 1657, 2066, 2589, 3263, 4140]
[4140, 5017, 6097, 7432, 9089, 11155, 13744, 17007, 21147]
[21147, 25287, 30304, 36401, 43833, 52922, 64077, 77821, 94828, 115975]</pre>
 
=={{header|Vlang}}==
{{trans|Go}}
<syntaxhighlight lang="v (vlang)">import math.big
 
fn bell_triangle(n int) [][]big.Integer {
Line 3,962 ⟶ 4,652:
println(bt[i])
}
}</langsyntaxhighlight>
 
{{out}}
Line 4,000 ⟶ 4,690:
{{trans|Go}}
{{libheader|Wren-fmt}}
<langsyntaxhighlight ecmascriptlang="wren">import "./big" for BigInt
import "./fmt" for Fmt
 
var bellTriangle = Fn.new { |n|
Line 4,024 ⟶ 4,714:
Fmt.print("$2d: $,i", 50, bt[50][0])
System.print("\nThe first ten rows of Bell's triangle:")
for (i in 1..10) Fmt.print("$,7i", bt[i])</langsyntaxhighlight>
 
{{out}}
Line 4,057 ⟶ 4,747:
4,140 5,017 6,097 7,432 9,089 11,155 13,744 17,007 21,147
21,147 25,287 30,304 36,401 43,833 52,922 64,077 77,821 94,828 115,975
</pre>
 
=={{header|XPL0}}==
{{trans|Delphi}}
32-bit integer are required to calculate the first 15 Bell numbers.
{{works with|EXPL-32}}
<syntaxhighlight lang="xpl0">
\Bell numbers
code CrLf=9, IntOut=11, Text=12;
define MaxN = 14;
integer A(MaxN), I, J, N;
 
begin
for I:= 0 to MaxN - 1 do A(I):= 0;
N:= 0; A(0):= 1;
Text(0, "B("); IntOut(0, N); Text(0, ") = "); IntOut(0, A(0)); CrLf(0);
while N < MaxN do
begin
A(N):= A(0);
for J:= N downto 1 do A(J - 1):= A(J - 1) + A(J);
N:= N + 1;
Text(0, "B("); IntOut(0, N); Text(0, ") = "); IntOut(0, A(0)); CrLf(0)
end;
end
</syntaxhighlight>
{{out}}
<pre>
B(0) = 1
B(1) = 1
B(2) = 2
B(3) = 5
B(4) = 15
B(5) = 52
B(6) = 203
B(7) = 877
B(8) = 4140
B(9) = 21147
B(10) = 115975
B(11) = 678570
B(12) = 4213597
B(13) = 27644437
B(14) = 190899322
</pre>
 
=={{header|zkl}}==
<langsyntaxhighlight lang="zkl">fcn bellTriangleW(start=1,wantRow=False){ // --> iterator
Walker.zero().tweak('wrap(row){
row.insert(0,row[-1]);
Line 4,066 ⟶ 4,798:
wantRow and row or row[-1]
}.fp(List(start))).push(start,start);
}</langsyntaxhighlight>
<langsyntaxhighlight lang="zkl">println("First fifteen Bell numbers:");
bellTriangleW().walk(15).println();</langsyntaxhighlight>
{{out}}
<pre>
Line 4,074 ⟶ 4,806:
L(1,1,2,5,15,52,203,877,4140,21147,115975,678570,4213597,27644437,190899322)
</pre>
<langsyntaxhighlight lang="zkl">println("Rows of the Bell Triangle:");
bt:=bellTriangleW(1,True); do(11){ println(bt.next()) }</langsyntaxhighlight>
{{out}}
<pre>
Line 4,092 ⟶ 4,824:
</pre>
{{libheader|GMP}} GNU Multiple Precision Arithmetic Library
<langsyntaxhighlight lang="zkl">print("The fiftieth Bell number: ");
var [const] BI=Import("zklBigNum"); // libGMP
bellTriangleW(BI(1)).drop(50).value.println();</langsyntaxhighlight>
{{out}}
<pre>
The fiftieth Bell number: 10726137154573358400342215518590002633917247281
</pre>
 
{{omit from|PL/0}}
{{omit from|Tiny BASIC}}
3,038

edits