문자열 값을 변수 값에 추가하여 새 변수를 만드는 방법이 있는지 궁금합니다. sicstus prolog : 문자열을 변수 값에 추가하여 새 변수를 만듭니다.
V = 7,
foo(V) :-
NV = 'S'+V.
그래서 나는 NV는 결국 S7 값을 갖고 싶어하고, S7은 새로운 변수 : 내가 생각하고 무엇 . (V는 이전에 값 7로 할당 됨).
문자열 값을 변수 값에 추가하여 새 변수를 만드는 방법이 있는지 궁금합니다. sicstus prolog : 문자열을 변수 값에 추가하여 새 변수를 만듭니다.
V = 7,
foo(V) :-
NV = 'S'+V.
그래서 나는 NV는 결국 S7 값을 갖고 싶어하고, S7은 새로운 변수 : 내가 생각하고 무엇 . (V는 이전에 값 7로 할당 됨).
내가 SICStus 프롤로그를 가지고 있지 않지만,이 (lib(iso_light)
를로드 한 후) SWI - 프롤로그 6.2.6, B-프롤로그 8.1 이클립스 CLP 프롤로그에서 작동 :
V = 7, number_chars(V, N), atom_chars('S', A), append(A, N, X), atom_chars(NW, X).
그것은에서와 같이 작동 할 수 SICStus 또는 매우 작은 수정이 필요할 수 있습니다.
atom_concat/3
을 시도 할 수도 있지만 일부 Prolog 시스템은 숫자를 자동으로 원자로 변환 할 수 있지만 다른 것은 자동으로 변환하지 못합니다.
이 SWI - 프롤로그에서 작동하지만 B-프롤로그 또는 일식 CLP에서 :
V = 7, atom_concat('S', V, NW).
귀하의 예는 문자열보다는 원자를 사용합니다. 원자는 인용 부호가없는 베어 브릭 또는 인용 된 단어이며 아포스트로피 ('
)로 구분됩니다. 예 :
foo
은 원자입니다.'This is a quoted atom'
또한 원자다른 유형의 정수 (1234
) 및 빈리스트 []
포함 원자이다. 원자의 정의 특징은 원자 (나눌 수 없다)이다.
프롤로그 문자열, 다른 한편으로는, 항상 큰 따옴표 ("
)로 구분 과 문자 목록 (정수 코드 포인트)의 약어입니다. 몇 가지 예 :
""
정확히 (원자 될 일이) 빈리스트 []
과 동일합니다."abc"
은 목록 [97,98,99]
과 정확히 일치합니다.그래서 당신은 당신이 원자 또는 문자열를 사용하는 것을 의미인지에 대해 명확해야한다. 당신은 원자에 대해 얘기하고 귀하의 예를 ... Sicstus 및 SWI 모두에서
에서 가정
당신은 name/2
을 사용할 수 있어야합니다 프롤로그.특정 예를 들어, 당신은 할 수 있어야한다 간단하게 대답 :
foo(X , Y) :-
name('S' , [S]) ,
name(X , Codes) ,
name(Y , [S|Codes])
.
가 더 일반적으로, 당신이 말할 수 있어야한다 :
foo(AtomicPrefix , NumericSuffix , Concatenation) :-
name(AtomicPrefix , Pfx ) ,
name(NumericSuffix , Sfx ) ,
append(Pfx , Sfx , Codes) ,
name(Concatenation , Codes)
.
그러나, name/2
는 ISO-호환되지 않습니다.
foo(X, Y) :-
number_chars(X,Xs) ,
atom_chars(Y,['S'|Xs])
.
또는보다 일반적으로,
foo(AtomicPrefix , NumericSuffix , Concatenation) :-
atom_chars(AtomicPrefix , Pfx ) ,
number_chars(NumericSuffix , Sfx ) ,
append(Pfx , Sfx , Chars) ,
atom_chars(Concatenation , Chars)
.
을 또는 당신은이 라인을 따라 atom_concat\3
을 사용할 수 있어야합니다 : 대신, 당신은 유사한 방식으로 atom_chars/2
및 number_chars/2
을 사용할 수 있습니다
foo(Atom , Number , Concatenation) :-
number_chars(Number, Ds) ,
atom_chars(Sfx , Ds) ,
atom_concat(Pfx , Sfx , Concatenation)
.