문서는SICStus Prolog에서 copy_term/3으로 수집 된 제약 조건을 어떻게 복원합니까?
copy_term(+Term, -Copy, -Body)
모든 변수가 아무 새로 만든 용어 외부에서 발생하지 새로운 변수로 대체되어있는Term
의 사본을 만드는 것을 말한다.Term
에 변수가 포함 된 변수가있는 경우Body
은Body
을 실행하면Copy
의 변수에 동일한 속성이 복원됩니다.
이전에 일부 변수에 대해 수치 CLP (R) 제약 조건을 확인했으며 일부 시점에서 copy_term/3을 사용하여 이러한 제약 조건을 수집했습니다.
:-use_module(library(clpr)).
{Old>=0, A>=0,A=<10, NR= Old+Z, Z=Old*(A/D)}, copy_term(Old,New,CTR), call(CTR).
: 나는 '호출 (바디)'를 사용 제약을 복원 할 때 나중에, 나는 형태 여기 [nfr:resubmit_eq(...)]
의 인수에 "인스턴스화 오류"를 얻을이 문제를 보여주는 간단한 예입니다 결과 :
Instantiation error in argument 1 of '.'/2
! goal: [nfr:resubmit_eq([v(-1.0,[_90^ -1,_95^1,_100^1]),v(1.0,[_113^1])])]
내 질문은 : 어떻게 New
이상 Body
의 제약을 복원합니까? 나는 구체적인 예를 찾을 수 없었다.
@ j4nbur53 : 나는 말할 것이다 : 무해한. 중요한 것은 남은 것이 없다면'[]'이 주어진다는 것입니다. – false
예. call_residue/2 (여전히 YAP에 있음) 구현을 보면 어쨌든 많은 복사가 진행됩니다.그러나 적어도이 "새로운"인터페이스 (10yrs)는 비용이 적게 들고 이전 인터페이스와 비교하여 일정한 일관성을 유지합니다. – false
여기의 인터페이스는 SICStus에서 약 20 년의 경험으로 인한 결과입니다. – false