누군가 설명해 주실 수 있습니까? "g 설명"? 어떻게 f1 단위를 가져올 수 있으며 int를 반환 & 나머지 너무 혼란 스러워요 !!패턴 매칭 SML?
(* Description of g:
* g takes f1: unit -> int, f2: string -> int and p: pattern, and returns
* an int. f1 and f2 are used to specify what number to be returned for
* each Wildcard and Variable in p respectively. The return value is the
* sum of all those numbers for all the patterns wrapped in p.
*)
datatype pattern = Wildcard
| Variable of string
| UnitP
| ConstP of int
| TupleP of pattern list
| ConstructorP of string * pattern
datatype valu = Const of int
| Unit
| Tuple of valu list
| Constructor of string * valu
fun g f1 f2 p =
let
val r = g f1 f2
in
case p of
Wildcard => f1()
| Variable x => f2 x
| TupleP ps => List.foldl (fn (p,i) => (r p) + i) 0 ps
| ConstructorP (_,p) => r p
| _ => 0
end
와일드 카드 모든 것을 일치와 바인딩의 빈 목록을 생성합니다.
변수 s은 임의의 값 v와 일치하고 (s, v)를 보유하는 하나의 요소 목록을 생성합니다.
UnitP Unit 만 일치하고 빈 바인딩 목록이 생성됩니다.
ConstP 17은 Const 17 만 일치하고 빈 바인딩 목록을 생성합니다 (다른 정수에서도 마찬가지 임).
TupleP ps은 ps와 vs의 길이가 동일하고 모든 i에 대해 ps의 i 번째 요소가 vs의 i 번째 요소와 일치 함을 나타냅니다. 생성 된 바인딩 목록 중첩 된 패턴 일치의 모든 목록이 함께 추가됩니다.
ConstructorP (S1, P) 일치 생성자 S1과 S2가 같은 문자열이있는 경우 (S2, V) (당신이 =과 비교 가능), p는 V와 일치합니다. 생산 바인딩의 목록은에서 목록입니다 중첩 패턴 일치. 문자열 s1과 s2를 생성자 이름이라고합니다.
다른 일치하는 항목이 없습니다.
위대한 답변! 감사 :) –