2010-11-23 3 views
2

SML을 사용하여 기본 목록 작업을 수행하려고합니다.목록을 반복하는 방법은 무엇입니까?

목록의 각 요소를 추출하고 해당 요소에 문자열을 추가하여 목록에 다시 추가하려고합니다. 예 :

나는 SML에서 목록의 각 요소를 통해 반복 할 수있는 방법
List : [A,B,C,D] 
String : A 
Final List: [AA,AB,AC,AD] 

? ^을 사용하여 문자열을 추가하고 @을 사용하여 목록을 연결할 수 있지만 목록에서 각 요소를 추출하는 방법은 무엇입니까?

지도 또는 배열과 같은 것을 사용하여 이러한 목록 값을 저장하고 SML의 다른 기능에 전달할 수 있습니까?

지도에 대한 막연한 정보를 찾을 수 있었고 사용 방법에 대한 확실한 정보가 없었습니다. 이렇게

답변

1

간단한 두 가지 방법

- fun addstring (x::xs) a = (a^x) :: addstring xs a 
= | addstring []  a = [] 
= ; 
val addstring = fn : string list -> string -> string list 
- addstring ["A", "B", "C", "D"] "A"; 
val it = ["AA","AB","AC","AD"] : string list 

가 상기 목록을 소멸하는 패턴 매칭을 사용은 동작을 수행 한 후 간다 재귀 목록을 다시 구성한다. (.에 addstring 명시 경우보다 읽는 작은 조금 더 열심히 아마도 경우)

- fun addstring2 xs a = map (fn x => a^x) xs; 
val addstring2 = fn : string list -> string -> string list 

- addstring2 ["A", "B", "C", "D"] "A"; 
val it = ["AA","AB","AC","AD"] : string list 

이 사람은 공정한 조금 간단하지만지도를 사용하는 방법을 보여줍니다 - 당신은 소스에서 각 요소를 매핑하는 함수를 지정 대상 도메인에 원본 도메인의 요소 목록을 제공하고 대상 도메인에 목록을 반환합니다.

물론 이들 중 어느 것도 목록을 업데이트하지 않고 새 목록을 반환합니다.

+0

실제로이 목록을 통과 할 수 있는지 말해 줄 수 있습니까? 위의 경우 [ "AA", "AB", "AC"] 목록을 보유하고있는 'a'입니까? 함수를 추가하면 addString 함수가 값을 add 함수에 전달할 것인가? – JJunior

관련 문제