2016-03-23 8 views
-1
;; loads a board from the given file 

;; it expects the board to be in the format of a single S-expression: 

;; a list of nine lists, each containing 9 numbers 


    (defun get-board-from-file file 
     (let ((in (open file :if-does-not-exist nil))) 
     (when in (return-from get-board-from-file (read in))) 
     (when (not in) (format t "~%Unable to open file ~A" file)) 
     ) 
    ) 

Dies ist Teil einer Lösung für einen Sudoku-Löser.Was ist die Racket-Übersetzung dieses Stücks Lisp-Code?

+1

Was haben Sie in Racket versucht? Funktioniert etwas in Ihrer Übersetzung nicht? –

+0

Ich kenne Racket überhaupt nicht. Ich habe versucht, es durch kleine Übersetzungen von Lisp-Code zu lernen, mit denen ich vorher gearbeitet habe. – McFiddlyWiddly

+3

Willkommen bei StackOverflow! Es wird ermutigt, dass du zuerst einen Fehler machst, zeig uns, was du herausgefunden hast, und dann können wir dir helfen, über bestimmte Hindernisse hinwegzukommen, die du hast. Im Allgemeinen übersetzen die Leute nicht einfach Code. –

Antwort

1

die folgenden Versuchen Sie, es ist ein funktionales Äquivalent des Lisp-Code in der Frage, aber in Racket geschrieben:

(define (get-board-from-file file) 
    (with-handlers ([exn:fail:filesystem? 
        (lambda (exn) (printf "~%Unable to open file ~A" file))]) 
    (call-with-input-file file 
     (lambda (in) (read in))))) 

Der obige Code eine Ausnahme behandelt, wenn die Datei nicht existiert und dass sicher macht Der Port wird geschlossen, nachdem die Datei gelesen wurde.