是否可以将方法参数绑定到 Racket 中的任意位置?

Is it possible to bind method arguments to arbitrary positions in Racket?

今年我正在用 Racket 编写 Advent of Code,当我解析输入(保存为文件)时,我通常会使用某种方法映射每一行。在某些情况下,拼图输入可以使用 string->number 之类的东西直接映射,但在其他情况下,它需要在进一步操作之前用非空白字符串拆分。

当然,我可以使用 lambda 来做到这一点:

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

虽然这可行,但有时让多个嵌套的 lambda 执行此操作并进一步解析会很烦人,所以我想知道是否有一种方法可以有效地将 ','“绑定”到 string-split这样我就不需要将它包装在 lambda 中。

换句话说,有没有一种方法可以在不使用 lambda 的情况下将参数值绑定到方法的特定参数位置,例如将 , 绑定到 string-split?

的第二个参数位置

您可以编写一个辅助程序,这样您就不必多次定义相同的 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 <> ","))