如何将 map 与需要更多参数的函数一起使用
How to use map with a function that needs more arguments
我正在尝试将 map 与 (string-split "a,b,c" ",")
结合使用来拆分列表中的字符串。
(string-split "a,b,c" ",")
'("a" "b" "c")
如果在不使用“,”的情况下使用字符串拆分,则以下内容有效:
(define sl (list "a b c" "d e f" "x y z"))
(map string-split sl)
'(("a" "b" "c") ("d" "e" "f") ("x" "y" "z"))
但以下不会拆分列表中围绕“,”的字符串:
(define sl2 (list "a,b,c" "d,e,f" "x,y,z"))
(map (string-split . ",") sl2)
'(("a,b,c") ("d,e,f") ("x,y,z"))
如何将 map 与需要额外参数的函数一起使用?
#lang racket
(define samples (list "a,b,c" "d,e,f" "x,y,z"))
;;; Option 1: Define a helper
(define (string-split-at-comma s)
(string-split s ","))
(map string-split-at-comma samples)
;;; Option 2: Use an anonymous function
(map (λ (sample) (string-split sample ",")) samples)
;;; Option 3: Use curry
(map (curryr string-split ",") samples)
这里 (curryr string-split ",")
是 string-split
其中最后一个参数
总是 ","
.
map
将 n
个参数的过程应用于 n
列表的元素。如果您希望使用带有其他参数的过程,则需要定义一个新过程(可以是匿名的)以使用所需的参数调用您的原始过程。在你的情况下,这将是
(map (lambda (x) (string-split x ",")) lst)
正如@leppie 已经指出的那样。
我正在尝试将 map 与 (string-split "a,b,c" ",")
结合使用来拆分列表中的字符串。
(string-split "a,b,c" ",")
'("a" "b" "c")
如果在不使用“,”的情况下使用字符串拆分,则以下内容有效:
(define sl (list "a b c" "d e f" "x y z"))
(map string-split sl)
'(("a" "b" "c") ("d" "e" "f") ("x" "y" "z"))
但以下不会拆分列表中围绕“,”的字符串:
(define sl2 (list "a,b,c" "d,e,f" "x,y,z"))
(map (string-split . ",") sl2)
'(("a,b,c") ("d,e,f") ("x,y,z"))
如何将 map 与需要额外参数的函数一起使用?
#lang racket
(define samples (list "a,b,c" "d,e,f" "x,y,z"))
;;; Option 1: Define a helper
(define (string-split-at-comma s)
(string-split s ","))
(map string-split-at-comma samples)
;;; Option 2: Use an anonymous function
(map (λ (sample) (string-split sample ",")) samples)
;;; Option 3: Use curry
(map (curryr string-split ",") samples)
这里 (curryr string-split ",")
是 string-split
其中最后一个参数
总是 ","
.
map
将 n
个参数的过程应用于 n
列表的元素。如果您希望使用带有其他参数的过程,则需要定义一个新过程(可以是匿名的)以使用所需的参数调用您的原始过程。在你的情况下,这将是
(map (lambda (x) (string-split x ",")) lst)
正如@leppie 已经指出的那样。