Scheme programming I/O and remove -


i doing scheme project , having issues coding. project have keep class roster(implemented list) , able perform different operations. have 2 questions:

  1. my write roster function opens file name passed through not write list file , im not sure why? can find function in perform task function , when n = 2.

  2. and remove function... when go test it, error: ;the procedure #[compiled-procedure 13 ("list" #x3) #x14 #x11a2714] has been called 4 arguments; requires 2 arguments. remove function called removestu

here code:

    (define performtask   (lambda (n roster)   (cond ((= n 0) (begin                    (display "\n\tresetting roster...\n\n")                    (menu '())                   ))         ((= n 1) (begin                     (display "\n\tload roster file: ")                     (read (open-input-file (read-line)))                     (menu roster)                    ))         ((= n 2) (begin                     (display "\n\tstore roster file: ")                     (write roster (open-output-file (read-line)))                     (menu roster)                    ))         ((= n 3) (begin                     (display "\n\tdisplaying roster, sorted id:\n")                     (printroster (select-sort roster))                     (menu roster)                  ))         ((= n 4) (begin                     (display "\n\tdisplaying roster, sorted id:\n")                     (printroster (select-sort-name roster))                     (menu roster)                  ))         ((= n 5) (begin                     (display "\n\tdisplaying roster, sorted id:\n")                     (printroster (select-sort-grade roster))                     (menu roster)                  ))         ((= n 6) (begin                     (display "\n\tenter student name or id: ")                     (studentinfo roster (read-line))                     (menu roster)                  ))         ((= n 7) (begin                     (display "\n\tadd student class roster:\n\n")                     (cond ((null? roster) (menu (read-3-items 0 '())))                     (else (menu (list (read-3-items 0 '()) roster))))                  ))         ((= n 8) (begin                     (display "\n\tenter student name or id: ")                     (removestu roster (read-line))                     (menu roster)                  ))           ((= n 9) (begin                     (display "\n\texiting program...\n\n")                       #t                  ))         (else (begin                     (display "\n\ttask no. ")                     (display n)                     (display " not exist.\n\n")                     (menu roster)                  )             )       )    ) )  (define studentinfo    (lambda (lst value)       (cond ((null? lst) (display "\n\tstudent not found in roster.\n"))                 ((equal? (car (car lst)) value) (printrecord (car lst)))                     ((equal? (car (cdr (car lst))) value) (printrecord (car lst)))                          (else (studentinfo (cdr lst) value))       )    ) )   (define printroster    (lambda (billy)       (cond ((null? billy) (newline))                 (else (begin                              (printrecord (car billy))                                   (printroster (cdr billy))                                     )                           )       )    ) )  (define printrecord    (lambda (lst)       (begin          (display "\tid=")          (display (car lst))          (display ", name=")          (display (car (cdr lst)))          (display ", grade=")          (display (car (cdr (cdr lst))))          (newline)       )    ) )  (define select-sort    (lambda (roster)       (cond ((null? roster) '())             (else (cons (smallest roster (car roster)) (select-sort (remove roster (smallest roster (car roster))))))       )    ) )  (define select-sort-name    (lambda (roster)       (cond ((null? roster) '())             (else (cons (smallest-name roster (car roster)) (select-sort (remove roster (smallest-name roster (car ro\ ster))))))       )    ) )  (define select-sort-grade    (lambda (roster)       (cond ((null? roster) '())                 (else (cons (smallest-grade roster (car roster)) (select-sort (remove roster (smallest-grade roster (\ car roster))))))       )    ) )  (define smallest    (lambda (roster record)       (cond ((null? roster) record)                 ((< (car (car roster)) (car record)) (smallest (cdr roster) (car roster)))                     (else (smallest (cdr roster) record))       )    ) )  (define smallest-name    (lambda (roster record)       (cond ((null? roster) record)             ((< (car (cdr (car roster))) (car (cdr record))) (smallest-name (cdr roster) (car roster)))             (else (smallest-name (cdr roster) record))       )    ) )  (define smallest-grade    (lambda (roster record)       (cond ((null? roster) record)             ((< (cdr (cdr (car roster))) (cdr (cdr record))) (smallest-grade (cdr roster) (car roster)))             (else (smallest-grade (cdr roster) record))       )    ) )  (define removestu   (lambda (roster item)       (cond ((null? roster) '())             ((equal? item (car roster)) (cdr roster))             (else (cons (car roster) removestu (cdr roster) item))       )    ) )  (define read-3-items    (lambda (n l)       (cond ((= n 0) (begin                        (display "\tstudent id: ")                        (read-3-items 1 (list (read)))                             ))                 ((= n 1) (begin                            (display "\n\tstudent name: ")                            (read-3-items 2 (list (car l) (read-line)))                                         ))  ((= n 2) (begin                                (display "\n\tgrade: ")                                (list (car l) (car (cdr l)) (read))                                     ))       )    ) )   (define menu    (lambda (roster)       (begin          (display "\n\tclass roster management system\n")           (display "\t============================\n")            (display "\t   menu\n")             (display "\t============================\n")              (display "\t0. reset roster\n")               (display "\t1. load roster file\n")                (display "\t2. store roster file\n")                 (display "\t3. display roster sorted id\n")                  (display "\t4. display roster sorted name\n")                   (display "\t5. display roster sorted grade\n")                    (display "\t6. display student info\n")                     (display "\t7. add student roster\n") (display "\t8. remove student roster\n")                       (display "\t9. exit\n\n")                        (display "\tenter choice: ")                         (performtask (read) roster)       )    )    ) 

  1. (write roster (open-output-file (read-line))) seems ok. don't close port open-output-file. perhaps should use with-output-to-file instead.

  2. cons called 4 arguments (cons (car roster) removestu (cdr roster) item). takes 2 make pair!

i noticed when reading file don't use it. tail call (menu roster) , result (read (open-input-file (read-line))) read , returned and, since it's not used, deleted.


Comments

Popular posts from this blog

asp.net mvc - SSO between MVCForum and Umbraco7 -

Python Tkinter keyboard using bind -

ubuntu - Selenium Node Not Connecting to Hub, Not Opening Port -