如何使用需要更多参数的函数的map

时间:2016-07-26 11:55:48

标签: scheme racket map-function partial-application

我正在尝试使用带有(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用于需要其他参数的函数?

2 个答案:

答案 0 :(得分:4)

#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,其中最后一个参数 总是","

答案 1 :(得分:1)

set output $expect_out(buffer)map个参数的过程应用于n列表的元素。如果您希望使用带有其他参数的过程,则需要定义一个可能是匿名的新过程,以使用所需的参数调用原始过程。在你的情况下,这将是

n

正如@leppie已经指出的那样。