Salve,
chiedo aiuto riguardo ad un esercizio di programmazione in Scheme che affronta la somma di interi utilizzando la Rappresentazione Ternaria Bilanciata (BTR). Un numero intero in BTR � rappresentato da una stringa di cifre -/+/. che rispettivamente valgono -1/1/0.
Il quesito mi chiede di determinare la rappresentazione BTR della somma di 2 numeri interi in notazione binaria, ovvero di definire la procedura btr-sum.
Per quanto riguarda le procedure ausiliarie non ho riscontrato problemi. Al momento di unirle, per�, mi sfugge la procedura ricorsiva che svolga la somma di 2 qualsiasi rappresentazioni BTR. Nello specifico non riesco a determinare dei buoni casi base.
Qui sotto trovate le procedure ausiliare.
Vi chiedo solo di darmi un consiglio su come proseguire.
Grazie


( define lsd ; val: cifra meno significativa ( carattere )
( lambda ( s ) ; s: stringa ( BTR )
( if ( string=? s "")
#\.
( substring s ( - ( string-length s )1 ) ( string-length s ))
)))




( define head ; val: parte che precede ultima cifra ( stringa )
( lambda ( s ) ; s: stringa ( BTR )
( if ( string=? s "")
""
( substring s 0 ( - ( string-length s )1 ))
)))




(define btr-digit-sum ; val: carattere +/./- ( cifra incolonnata ) Somma di 3 cifre
(lambda (u v c) ; u, v, c: caratteri +/./- u,v: cifre incolonnate c: riporto in entrata
(cond ((char=? u #\-) ; u v c
(cond ((char=? v #\-)
(cond ((char=? c #\-) ; - - -
#\.)
((char=? c #\.) ; - - .
#\+)
((char=? c #\+) ; - - +
#\-)))
((char=? v #\.)
(cond ((char=? c #\-) ; - . -
#\+)
((char=? c #\.) ; - . .
#\-)
((char=? c #\+) ; - . +
#\.)))
((char=? v #\+) ; - + c
c)))
((char=? u #\.)
(cond ((char=? v #\-)
(cond ((char=? c #\-) ; . - -
#\+)
((char=? c #\.) ; . - .
#\-)
((char=? c #\+) ; . - +
#\.)))
((char=? v #\.) ; . . c
c)
((char=? v #\+)
(cond ((char=? c #\-) ; . + -
#\.)
((char=? c #\.) ; . + .
#\+)
((char=? c #\+) ; . + +
#\-)))))
((char=? u #\+)
(cond ((char=? v #\-) ; + - c
c)
((char=? v #\.)
(cond ((char=? c #\-) ; + . -
#\.)
((char=? c #\.) ; + . .
#\+)
((char=? c #\+) ; + . +
#\-)))
((char=? v #\+)
(cond ((char=? c #\-) ; + + -
#\+)
((char=? c #\.) ; + + .
#\-)
((char=? c #\+) ; + + +
#\.)))))
)))




( define btr-carry ; val: riporto in uscita ( carattere )
( lambda ( u v c ) ; u,v: 2 cifre incolonnate ( BTR ) c: riporto in entrata ( BTR )
(cond ((char=? u #\-)
(cond ((char=? v #\-)
(cond ((char=? c #\-) ; - - -
#\-)
((char=? c #\.) ; - - .
#\-)
((char=? c #\+) ; - - +
#\.)))
((char=? v #\.)
(cond ((char=? c #\-) ; - . -
#\-)
((char=? c #\.) ; - . .
#\.)
((char=? c #\+) ; - . +
#\.)))
((char=? v #\+) ; - + c
#\.)))
((char=? u #\.)
(cond ((char=? v #\-)
(cond ((char=? c #\-) ; . - -
#\-)
((char=? c #\.) ; . - .
#\.)
((char=? c #\+) ; . - +
#\.)))
((char=? v #\.) ; . . c
#\. )
((char=? v #\+)
(cond ((char=? c #\-) ; . + -
#\.)
((char=? c #\.) ; . + .
#\.)
((char=? c #\+) ; . + +
#\+)))))
((char=? u #\+)
(cond ((char=? v #\-) ; + - c
#\.)
((char=? v #\.)
(cond ((char=? c #\-) ; + . -
#\.)
((char=? c #\.) ; + . .
#\.)
((char=? c #\+) ; + . +
#\+)))
((char=? v #\+)
(cond ((char=? c #\-) ; + + -
#\.)
((char=? c #\.) ; + + .
#\+)
((char=? c #\+) ; + + +
#\+)))))
)))



( define normalized-btr ; val: stringa con cifre zero in testa rimosse
( lambda ( s ) ; s: stringa ( BTR )
( if ( = ( string-length s ) 1 )
s
( cond (( char=? ( string-ref s 0 ) #\. )
( normalized-btr ( substring s 1 )))
( else
s )))))