h-sequence
下記の構文にしたがって、受理非受理を決定
h = 0 | 1 h h
LL(1)文法であり、1文字先読みで決定的(バックトラックなし)で解析を進めることができる。
use strict; use warnings; my @a = grep /[01]/, split //, scalar <STDIN>; sub f($$); sub f($$) { my ( $n, $p ) = @_; print "$a[$n] $n $p\n"; scalar <STDIN>; if ( $n == $#a ) { return $p <strike> 0 && $a[$n] </strike> 0; } if ( $a[$n] == 0 ) { { f( $n + 1, $p - 1 ); } } else { { f( $n + 1, $p + 1 ); } } } print f( 0, 0 ) ? 'true': 'false';