В этом году я провожу «Пришествие кода в Racket», и когда я анализирую ввод (сохраненный в виде файла), я обычно сопоставляю каждую строку каким-либо методом. В некоторых случаях ввод головоломки может быть отображен напрямую, используя что-то вроде string->number, но в других случаях его необходимо разделить строкой без пробелов перед дальнейшими манипуляциями.

Конечно, я могу сделать это с помощью лямбды:

; Custom method for handling the input reading
(read-input-lines #:line-parser (lambda (line) (string-split line ","))

Хотя это работает, иногда может раздражать наличие нескольких вложенных лямбда-выражений для этого и дальнейшего синтаксического анализа, поэтому мне интересно, есть ли способ эффективно «привязать» ',' к string-split, чтобы я не ' Нет необходимости заключать это в лямбду.

Другими словами, есть ли способ привязать значение аргумента к определенной позиции аргумента метода без использования лямбда, например привязать , ко второй позиции аргумента string-split?

0
josh 5 Дек 2020 в 20:35

1 ответ

Лучший ответ

Вы можете написать вспомогательную процедуру, поэтому вам не придется определять один и тот же lambda несколько раз:

(define (split-by-comma line)
  (string-split line ","))

(read-input-lines #:line-parser split-by-comma)

Более общим решением для привязки значения аргумента к определенной позиции аргумента метода без использования lambda было бы использование cut, найденного в SRFI 26:

(require srfi/26)
(read-input-lines #:line-parser (cut string-split <> ","))
2
Óscar López 5 Дек 2020 в 18:20