It looks like you have defined `contents' twice, maybe thats the core of your issue?

On 08/03/2010 05:07 PM, [email protected] wrote:

Hello I have a program consists of two tasks. My first task works fine. In second task I have to create a new chip as soon as the new card has been created.

I am giving you sample run for the idea

==> (define c1 (a-chip))
c1
==> (contents c1)
0
==> (charge c1 10.00)
done
==> (contents c1)
10.0
==> (discharge c1 9.34)
9.34
==> (contents c1)
0.66
==> (discharge c1 0.67)
no





==> (define alan (a-card 432776 1904))
alan
==> (define bill (a-card 1 95))
bill
==> (inserted bill 96)
no
==> (contents bill) // HAVING PROBLEM IN THIS
ERROR: Not inserted
==> (inserted bill 95)
done
==> (contents bill) //PROBLEM IN THIS
0
==> (free bill)
done
==> (new-pin bill 96)
no
==> (inserted bill 95)
done
==> (new-pin bill 96)
done
==> (account-number bill)
1
==> (free bill)
done
==> (account-number bill)
1

I AM NOT ABLE TO WORK OUT CONTENTS IN TASK 2..
I have already created contents in task 1. Do I have to create it again.

let me summarise my problem-
when I write (contents card) it has to work all the three procedures defined in task one contents, charge and discharge.
I have given some efforts but don't worth it.

Any help will be appreciated
thanks

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;TASK 1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(define (a-chip)

  (let ( (balance 0) )
    (define (the-chip op)
(sequence
        (cond ((eq? op 'contents)     (lambda () balance))
              ((eq? op 'charge)         charge)
              ((eq? op 'discharge)      discharge)
              (else (error "chip: unknown operation" op))
        )
'nononon)
    )

    (define (charge amount)
        (set! balance amount)
'done
    )

    (define (discharge amount)
       (if (> (- balance amount) 0)
( sequence (set! balance (- balance amount))
amount)
'no
)
    )

    the-chip
  )
"mjuu"

)



(define (charge chip amount)    ((chip 'charge) amount))
(define (discharge chip amount) ((chip 'discharge) amount))

(define (contents chip) ((chip 'contents) ))


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;TASK 2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


(define (a-card account tpin)
( let ( (chip #f))
   (define (the-card request)
(cond ((eq? request 'inserted) inserted)
      ((eq? request 'free)   free)
      ((eq? request 'new-pin) new-pin)
      ((eq? request 'account) ( lambda () account))
      (else (error "card: unknown operation" request))
)
)







(define (inserted pin )
(if (= pin tpin)
(sequence (set! chip #t)
)
'done)
'no))

(define (free)
(sequence (set! chip #f)
'done)
)


(define (new-pin new)
(if (eq? #t chip )
(sequence (set! tpin new )
'done)
'no)
)







the-card
)
   )


(define (contents card) ((card 'contents)))
(define (pupu card) ((card 'pupu)))
(define (inserted card pin) ((card 'inserted ) pin))
(define (free card) ((card 'free)))
(define (new-pin card new) ((card 'new-pin) new))
(define (account-number card) ((card 'account)))


_________________________________________________
   For list-related administrative tasks:
   http://lists.racket-lang.org/listinfo/users

_________________________________________________
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/users

Reply via email to