jestem przenoszenie skrypt Pythona do Racket jako doświadczenie uczenia się, a nie mam tej funkcji:Jak mogę zrobić ten kod rakieta DRYER?
(define (check-status)
(define git [find-executable-path "git"])
(define-values (ckot out in err)
(subprocess #f #f #f git "checkout" "-q" "master"))
(define-values (local lout lin lerr)
(subprocess #f #f #f git "rev-parse" "@"))
(define-values (remote rout rin rerr)
(subprocess #f #f #f git "rev-parse" "@{u}"))
(define-values (merge-base mbout mbin mberr)
(subprocess #f #f #f git "merge-base" "@" "@{u}"))
(display-lines (port->lines mbout))
(define ports '(ckot out in err local lout lin lerr remote rout rin rerr merge-base mbout mbin mberr))
(map (lambda (x)
(cond ((input-port? x) (close-input-port x))
((output-port? x) (close-output-port x)))) ports))
Problem polega na tym, że nie jest bardzo suche. Ponieważ używam Lisp i Lisp znany jest w stanie robić szalone rzeczy, chcę wiedzieć, czy istnieje sposób, aby wziąć cały kod subprocess i rozpakować go więc mogę zrobić coś takiego:
(define (check-status)
(define commands '(
'("checkout" "-q" "master")
'("rev-parse" "@")
'("rev-parse" "@{u}")
'("merge-base" "@" "@{u}"))
(map currently-immaginary-git-command-fn commands))
i kończy się listą danych wyjściowych każdego polecenia na liście poleceń. Jak to zrobić? Ponieważ jestem nowicjuszem w całej sprawie Lisp/Scheme, staram się znaleźć składnię, a ja nie jestem w pełni świadoma dostępnych dla mnie zasobów.
To byłoby dobre pytanie dla [StackExchange CodeReview] (https://codereview.stackexchange.com/). –
To już ma akceptowaną odpowiedź, chociaż @ Jonathan jest mile widziany, aby wziąć swój kod roboczy i opublikować go w Code Review, jeśli chce go przejrzeć – Phrancis
BTW, kod zamknięcia portu nie zadziała: ''(cotot out in. ..) 'jest listą symboli; jest to to samo, co '(lista 'ckot' out 'w ...)'. Zamiast tego chcesz '(list cotot w ...)'. –