2017-02-15 4 views
2

내가이 가지고있는 REPL을 사용하여, SML의 Charlist 문자열을 비교하려고를 사용하여 포함 Charlist를 포함하며 String을 단일 Char에만 비교합니다. 누구든지이 문제를 해결할 수있는 아이디어가 있습니까? String str을 폭발시키고 Char 목록을 비교할 수는 있지만, 이것들에 대한 함수인지 확실하지 않습니다. 따라서 누구나 내가 읽을 수있는 기능이나 아이디어에 대한 아이디어가 있다면 알려주십시오. 목표는 문자열에 정의 된 Charlist가 있는지 확인하는 것입니다.SML은 문자열과 Charlist

나는 SML에 매우 익숙하므로 어떤 도움도 대단히 감사하겠습니다!

+0

'wxyz'가 알파벳에없는 이유가 있습니까? 어떤 경우 : 힌트 1 :'List.all'이 유용합니다. 힌트 2 :'Char.contains str'은'char -> bool' 타입의 함수입니다. –

+0

나는 글을 편집했고, 누락 된 "wxyz"는 나에 의해 오타되었다. 나는 방금 언급 한 두 가지를 살펴볼 것입니다. 내가 오늘 가지고 있던 기능은 다음과 같다 : 재미 isPangram c = Char 일 경우.contains (c, charalphabet) 다음에 참 true, 그렇지 않으면 false; 작동하지 않아도 올바른 경로에 있습니까? – firetiger443

+0

예, 'Char.contains'는 작업을위한 자연스러운 도구이며, 현재 코드의 문제점을 알고 있다는 의미에서 올바른 경로에 있습니다. 그러나 'Char.contains'는 카레 함수이므로, 괄호를 입력과 같이 괄호로 묶는 것은 정확하지 않으므로 char 대 char 목록 문제 외에 다른 문제가 발생합니다. –

답변

1

Char.contains의 인수 사이에 괄호를 넣고 쉼표를 넣는 방법은 Char.contains과 같은 기능을 이해하는 데 문제가 있음을 나타냅니다. 이러한 함수를 카레 함수라고하며 두 변수의 함수로 생각하면 다소 오해의 소지가 있습니다.

Char.contains는 string -> char -> bool의 기능입니다. 입력 유형은 문자열이고 출력 유형은 char -> bool 유형의 함수입니다. 종종이 출력 기능이 즉시 평가하지보다 : "cat"에 evalauted되는 함수 Char.contains : 당신이 두 변수의 기능을 평가처럼 보일 수도 있지만 실제로는 한 변수의 두 기능을 평가

- Char.contains "cat" #"a"; 
val it = true : bool 

char -> bool 유형의 함수를 반환하려면이 후자의 함수는 #"a"으로 평가되어 최종 결과를 얻습니다.

Char.contains을 사용하면 이 아닌 함수를 반환 할 수 있습니다. 즉,이 즉시 평가됩니다. 예를 들어

val isVowel = Char.contains "aeiou"; 
여기

isVowel는 (소문자) 문자가 모음인지 확인하는 데 사용할 수있는 기능이다.

List.all('a -> bool) -> 'a list -> bool의 기능입니다. 주어진 유형의리스트 (예 : char)가 속성을 만족하면 모든 요소를 ​​검사하려면 해당 유형의 요소를 가져와 부울 값을 반환하는 함수를 전달해야합니다 (예 : char -> bool;

-

그러나 우리는 이미 유형 char -> bool의 기능을 제조하는 방법을 알고 : Char.contains를 사용을 문자열 s를 들어, Char.contains s 다음 알파벳 문자 목록에 적용되는 결과 기능을 List.all에 전달 할 수있는 기능은 다음과 같습니다.

val alphabet = explode "abcdefghijklmnopqrstuvwxyz"; 
fun isPanagram s = List.all (Char.contains s) alphabet; 

이유는함수 평가가 왼쪽 연관이므로은 괄호로 묶습니다. 괄호가 없으면 SML은 이것을 의미가없는 (List.all Char.contains) s으로 구문 분석합니다.

+0

심층적 인 응답/설명을 해주셔서 너무 감사드립니다. 당신이 추천 한 몇 가지 변화들과 함께, 나는 완벽하게 작동하는 나의 기능을 가지고있다. 다시 나와 함께 고맙고 모든 것을 잘 설명 할 시간을내어 주셔서 감사합니다! – firetiger443