2016-07-26 8 views
3

(string-split "a,b,c" ",")のマップを使ってリスト内の文字列を分割しようとしています。作品に続きより多くの引数を必要とする関数でmapを使う方法

(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")) 

どのようにすることができます追加の引数が必要な関数でマップを使用しますか?

+3

'(地図(ラムダ(x)(文字列分割x"、 "))l))' – leppie

+0

シンプル!答えとして入力してください。 – rnso

答えて

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

オプション4: 'srfi/26'から' cut'を使います。 –

+1

初めてのカリーをお聞きしましょう! – rnso

+1

オプション5: '' fancy-app''(https://github.com/samth/fancy-app)が必要です。 '(map(string-split _"、 ")samples)' –

1

mapは、n引数の手順をnリストの要素に適用します。他の引数を取るプロシージャを使用する場合は、必要な引数を使用して元のプロシージャを呼び出すために、匿名の新しいプロシージャを定義する必要があります。あなたの場合、これはすでに指摘されているように

(map (lambda (x) (string-split x ",")) lst) 

となります。

関連する問題