터미널에서 다음과 같이 초기화하는 경우 :
numbers((2,5)).
두 값을 개별적으로 어떻게 얻을 수 있습니까? 내 코드에 다음이 있습니다.
numbers(Pair_numbers) :- Pair_numbers is (X, Y).
그리고 이것은 작동하지 않습니다. 내가 원하는 X
로 일을 2
하고 Y
는 AS 5
그래서 나중에 내가 좋아하는 일에 사용할 수 있습니다에 있음 :
nth1(X, Random_list, List_Row)
nth1(Y, List_Row, Value)
프롤로그 코드에서 "상수"를 유지하는 유일한 관용적 옵션은 위의 lurker의 주석에서 지적한 것처럼 사실로 유지하는 것입니다. 코드 어딘가에이 사실 이있을 것입니다 .
numbers(2, 5).
그런 다음 필요할 때 값을 얻기 위해 사실을 평가해야합니다.
?- numbers(X, Y), /* do something with X and Y */
이것은 C 파일의 맨 위에 작성하는 것과 거의 같은 아이디어입니다.
#define NUMBER1 2
#define NUMBER2 5
또는 글로벌 범위에서
const int n1 = 2;
const int n2 = 5;
지적했듯이 "튜플"이나 다른 구조로 만들 필요는 없으며 두 개의 인수 만 사용하면됩니다.
"터미널"또는 최상위 레벨에서 수행하려면 다음을 시도해보십시오.
?- assertz(numbers(2, 5)).
...하지만 조심하세요 : 당신은 이미 이것을 가지고 있지 않은지 확인하고 싶을 수도 있습니다. 따라서 조금 더 안전 할 수 있습니다.
?- retractall(numbers(_,_)), assertz(numbers(2, 5)).
또는 어쩌면
?- abolish(numbers/2), assertz(numbers(2, 5)).
사용 여부 abolish
또는 retractall
.... 설명서를 읽으십시오. 때에 따라 다르지.
또한 "전역 변수"의 다른 특징을 가질 수 있지만 대부분의 사용 사례에서는 문제가되지 않습니다.
그리고 마지막으로 한 가지 : 적어도 SWI-Prolog를 사용하면 이전 쿼리의 변수 값에 $Variable_name
. 다음은 SWI-Prolog의 최상위 수준과의 상호 작용에서 얻은 실제 기록입니다.
?- X = 2.
X = 2.
?- Y = 5.
Y = 5.
?- X < Y.
ERROR: </2: Arguments are not sufficiently instantiated
?- $X < $Y.
true.
?- Z is $X + $Y.
Z = 7.
다른 구현에도 비슷한 것이있을 수 있습니다. 그것에 익숙해지지 마십시오.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다