23
좁히는 연산이 플렉시블 호출되는 반면, 경질이라고 residuate 작업. 모든 정의 된 연산은 유연하지만 산술 연산과 같은 대부분의 기본 연산은 추측이 합리적인 옵션이 아니므로 엄격합니다.
Prelude> x ++ [3,4] =:= [1,2,3,4] where x free
Free variables in goal: x
Result: success
Bindings:
x=[1,2] ?
: 작업 "++"우리는 특정 속성을 만족하는 목록을 검색하는 데 사용할 수 있습니다, 유연 이후
infixr 5 ++
...
(++) :: [a] -> [a] -> [a]
[] ++ ys = ys
(x:xs) ++ ys = x : xs ++ ys
: 예를 들어, 다음과 같이 전주곡이 목록의 연결 작업을 정의
한편, 덧셈 "+"와 같은 사전 정의 된 산술 연산은 고정적입니다. 따라서, 호출은 "+"논리 변수와 인수는 넙치하기 :
Prelude> x + 2 =:= 4 where x free
Free variables in goal: x
*** Goal suspended!
카레가 정지됩니다 쓰기 목표를 방지하기 위해 표시되지 않습니다. 어떤 유형의 시스템이 목표가 일시 중지 될 것인지 미리 탐지 할 수 있습니까?
IMO와 같은 유형의 질문은 형식 시스템 (아마도 http://cstheory.stackexchange.com)이나 커리 전문가 (메일 링리스트)의 전문가가 더 빨리 대답 할 수 있습니다. –