Jump to content

Y combinator: Difference between revisions

m
(→‎{{header|Quackery}}: added some more commentary)
Line 316:
-->
 
The version below works with Algol 68 Genie 2.8.4 tested with Linux kernel release 5.1618.135-200.fc35fc36.x86_64
 
<lang algol68>BEGIN
Line 328:
 
 
# Y_combinator = ffunc_gen => ( x => x( x ) )( x => ffunc_gen( arg => x( x )( arg ) ) ) ; #
 
PROC y combinator = ( PROC( F ) F func gen ) F:
Line 341:
 
 
#
# fac_gen = fac => (n => ( ( n === 0 ) ? 1 : n * fac( n - 1 ) ) ) ; #
factorial =
# fac_gen = Y_combinator( fac => ( n => ( ( n === 0 ) ? 1 : n * fac( n - 1 ) ) ) ; #)
;
#
 
F factorial =
PROC( F ) F fac gen = ( F fac ) F:
y combinator(
( ( F fac , INT n ) INT: IF n = 0 THEN 1 ELSE n * fac( n - 1 ) FI )
PROC( F ) F fac gen = ( F fac ) F:
( ( F fac , INT n ) INT: IF n = 0 THEN 1 ELSE n * fac( n - 1 ) FI )
( fac , )
)
;
 
 
#
# fib_gen = fib => ( n => ( ( n === 0 ) ? 0 : ( n === 1 ) ? 1 : fib( n - 2 ) + fib( n - 1 ) ) ) ; #
fibonacci =
Y_combinator(
# fib_gen = fib => ( n => ( ( n === 0 ) ? 0 : ( n === 1 ) ? 1 : fib( n - 2 ) + fib( n - 1 ) ) ) ; #
)
;
#
 
F fibonacci =
PROC( F ) F fib gen = ( F fib ) F:
y combinator(
( ( F fib , INT n ) INT: CASE n IN 1 , 1 OUT fib( n - 2 ) + fib( n - 1 ) ESAC )
PROC( F ) F fib gen = ( F fib ) F:
( ( F fib , INT n ) INT: CASE n IN 1 , 1 OUT fib( n - 2 ) + fib( n - 1 ) ESAC )
( fib , )
)
;
 
 
# factorial = Y_combinator( fac_gen ) ; #
 
F factorial = y combinator( fac gen ) ;
 
# fibonacci = Y_combinator( fib_gen ) ; #
 
F fibonacci = y combinator( fib gen ) ;
 
 
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.