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
으로 구문 분석합니다.
'wxyz'가 알파벳에없는 이유가 있습니까? 어떤 경우 : 힌트 1 :'List.all'이 유용합니다. 힌트 2 :'Char.contains str'은'char -> bool' 타입의 함수입니다. –
나는 글을 편집했고, 누락 된 "wxyz"는 나에 의해 오타되었다. 나는 방금 언급 한 두 가지를 살펴볼 것입니다. 내가 오늘 가지고 있던 기능은 다음과 같다 : 재미 isPangram c = Char 일 경우.contains (c, charalphabet) 다음에 참 true, 그렇지 않으면 false; 작동하지 않아도 올바른 경로에 있습니까? – firetiger443
예, 'Char.contains'는 작업을위한 자연스러운 도구이며, 현재 코드의 문제점을 알고 있다는 의미에서 올바른 경로에 있습니다. 그러나 'Char.contains'는 카레 함수이므로, 괄호를 입력과 같이 괄호로 묶는 것은 정확하지 않으므로 char 대 char 목록 문제 외에 다른 문제가 발생합니다. –