This commit is contained in:
Ingy döt Net 2013-06-05 21:47:54 +00:00
parent 1f1ad49427
commit 6f050a029e
2496 changed files with 37609 additions and 3031 deletions

View file

@ -3,7 +3,7 @@ note
URI: "http://rosettacode.org/wiki/Ackermann_function"
class
ACKERMAN_EXAMPLE
APPLICATION
create
make
@ -27,15 +27,14 @@ feature {NONE} -- Initialization
feature -- Access
ackerman (m: NATURAL; n: NATURAL): NATURAL
ackerman (m, n: NATURAL): NATURAL
do
if m = 0 then
Result := n + 1
elseif m > 0 and n = 0 then
elseif n = 0 then
Result := ackerman (m - 1, 1)
elseif m > 0 and n > 0 then
else
Result := ackerman (m - 1, ackerman (m, n - 1))
end
end
end

View file

@ -1,10 +1,8 @@
-module(main).
-export([main/1]).
-module(ack).
-export([main/1, ack/2]).
main( [ A | [ B |[]]]) ->
io:fwrite("~p~n",[ack(toi(A),toi(B))]).
toi(E) -> element(1,string:to_integer(E)).
main( [A, B] ) ->
io:fwrite( "~p~n",[ack(erlang:list_to_integer(A), erlang:list_to_integer(B))] ).
ack(0,N) -> N + 1;
ack(M,0) -> ack(M-1, 1);

View file

@ -0,0 +1,22 @@
#APPTYPE CONSOLE
TestAckermann()
PAUSE
SUB TestAckermann()
FOR DIM m = 0 TO 3
FOR DIM n = 0 TO 10
PRINT AckermannF(m, n), " ";
NEXT
PRINT
NEXT
END SUB
FUNCTION AckermannF(m AS INTEGER, n AS INTEGER) AS INTEGER
IF NOT m THEN RETURN n + 1
IF NOT n THEN RETURN AckermannA(m - 1, 1)
RETURN AckermannC(m - 1, AckermannF(m, n - 1))
END FUNCTION
DYNC AckermannC(m AS INTEGER, n AS INTEGER) AS INTEGER

View file

@ -0,0 +1,11 @@
int Ackermann(int m, int n)
{
if (!m) return n + 1;
if (!n) return Ackermann(m - 1, 1);
return Ackermann(m - 1, Ackermann(m, n - 1));
}
int main(int m, int n)
{
return Ackermann(m, n);
}

View file

@ -0,0 +1,3 @@
END DYNC
DYNASM AckermannA(m AS INTEGER, n AS INTEGER) AS INTEGER

View file

@ -0,0 +1,35 @@
ENTER 0, 0
INVOKE Ackermann, m, n
LEAVE
RET
@Ackermann
ENTER 0, 0
.IF DWORD PTR [m] .THEN
JMP @F
.ENDIF
MOV EAX, n
INC EAX
JMP xit
@@
.IF DWORD PTR [n] .THEN
JMP @F
.ENDIF
MOV EAX, m
DEC EAX
INVOKE Ackermann, EAX, 1
JMP xit
@@
MOV EAX, n
DEC EAX
INVOKE Ackermann, m, EAX
MOV ECX, m
DEC ECX
INVOKE Ackermann, ECX, EAX
@xit
LEAVE
RET 8

View file

@ -0,0 +1 @@
END DYNASM

View file

@ -0,0 +1,9 @@
function ack(m,n)
if m == 0
return n + 1
elseif n == 0
return ack(m-1,1)
else
return ack(m-1,ack(m,n-1))
end
end

View file

@ -0,0 +1 @@
ack2(m,n) = m == 0 ? n + 1 : n == 0 ? ack2(m-1,1) : ack2(m-1,ack2(m,n-1))

View file

@ -1,7 +1,5 @@
#lang racket
(define (ackermann m n)
(cond [(zero? m) (add1 n)]
[(and (> m 0) (zero? n))
(ackermann (sub1 m) 1)]
[(and (> m 0) (> n 0))
(ackermann (sub1 m) (ackermann m (sub1 n)))]))
[(zero? n) (ackermann (sub1 m) 1)]
[else (ackermann (sub1 m) (ackermann m (sub1 n)))]))

View file

@ -1,14 +1,14 @@
("ackermann") m n
(ackermann) m n
0 3
(zero?) m
(add1) n
("ackermann") m n
(ackermann) m n
2 0
(and) (positive?) m (zero?) n
("ackermann") (sub1) m 1
(ackermann) (sub1) m 1
("ackermann") m n
(ackermann) m n
2 3
(and) (positive?) m (positive?) n
("ackermann") (sub1) m ("ackermann") m (sub1) n
(ackermann) (sub1) m (ackermann) m (sub1) n