Y combinator: Difference between revisions

m
Line 316:
-->
 
The version below works with Algol 68 Genie 2.8.4 tested with Linux kernel release 5.16.1112-200.fc35.x86_64
 
<lang algol68>BEGIN
Line 324:
 
MODE F = PROC( INT ) INT ;
MODE YX = PROC( YX ) F ;
 
# YY_combinator = f => ( yx => yx( yx ) )( yx => f( arg => yx( yx )( arg ) ) ) ; #
 
PROC y = ( PROC( F ) F pff ) F:
PROC y combinator = ( PROC( Y yF ) F: func y( ygen ) )F:
( ( X x ) F: x( x ) )
(
(
( PROC( F ) F pfffunc gen , YX yx ) F:
pfffunc gen( ( ( YX yx , INT arg ) INT: yx( yx )( arg ) )( yx , ) )
)( pfffunc gen , )
)
;
 
# fibgen = fib => ( n => ( ( n === 0 ) ? 0 : ( n === 1 ) ? 1 : fib( n - 2 ) + fib( n - 1 ) ) ) ; #
 
PROC( F ) F fibgen = ( F fib ) F:
( ( F fib , INT n ) INT: CASE n IN 1 , 1 OUT fib( n - 2 ) + fib( n - 1 ) ESAC )( fib , )
( fib , )
;
 
# for ( let i = 1 ; i <= 12 ; i++) { console.log( " " +Y Y_combinator( fibgen )( i ) ) ; } #
 
INT nofibs = 12 ;
print( ( "The first " , whole( nofibs , 0 ) , " fibonacci numbers." , newline ) ) ;
FOR i TO nofibs
DO
print( whole( y combinator( fibgen )( i ) , -11 ) )
OD ;
print( newline )
Anonymous user