Данные, защищенные паролем - Lisp

Формулировка задачи:

Недавно начала изучать лисп и столкнулась с такой проблемой: Есть процедура make-account которая создает счета, защищенные паролем. Непосредственно, что делать с самой процедурой я понимаю, а вот как защитить ее паролем - не совсем. Объясните, пожалуйста)) Вот код, но он не работает((
#lang racket
(define (make-account balance password)
(define (withdraw amount)
(if (>= balance amount)
(begin (set! balance (- balance amount))
balance)
"Недостаточно денег на счете"))
(define (deposit amount)
(set! balance (+ balance amount))
balance)
  
       (define (secret-password sp)
         (cond ((= password sp)
              secret-password)
               (else (error "Неверный пароль"))))
  
(define (dispatch m)
(cond ((eq? m 'withdraw) withdraw)
((eq? m 'deposit) deposit)
 
       ((eq? m 'secret-password) secret-password)
 
(else (error "Неизвестный вызов -- MAKE-ACCOUNT"
m))))
dispatch)
 
(define acc (make-account 100 'secret-password))

Код к задаче: «Данные, защищенные паролем - Lisp»

textual
(define (make-account balance password)
  (define (wrong-passwd arg) "Incorrect password")
  (define (withdraw amount)
    (if (>= balance amount)
           (begin (set! balance (- balance amount))
                  balance)
       "Insufficient funds"))
    (define (deposit amount)
    (set! balance (+ balance amount))
    balance)
  (define (dispatch passwrd m)
    (if (eq? passwrd password)
      (cond ((eq? m 'withdraw) withdraw)
              ((eq? m 'deposit) deposit)
              (else (error "Unknown request -- MAKE-ACCOUNT"
                m)))
       wrong-passwd))
  dispatch)
 
(define acc (make-account 100 'secret-password))
 
(display ((acc 'secret-password 'withdraw) 40)) (newline)
(display ((acc 'secret-password 'withdraw) 40)) (newline)
(display ((acc 'secret-password 'withdraw) 40)) (newline)
(display ((acc 'some-other-password 'deposit) 50)) (newline)

7   голосов, оценка 4.143 из 5


СОХРАНИТЬ ССЫЛКУ