“let *”(별표를 보자)은 무엇을 의미합니까?


답변:


19

이는 둘 이상의 바인딩이있을 때 변수가 순차적으로 바인딩되므로 각각이 바인딩되기 전에 바인딩 된 값, 즉 바인딩에서 앞에 오는 값에 바인딩 된 값에 의존 할 수 있음을 의미합니다 let*.

의 경우 let(별표), 바인딩의 아무도 (변수가 원칙적으로 병렬로 결합 될 수있는) 다른 사람의 전에 발생하는 것으로 가정 할 수 없습니다.

따라서 의 값에 (let ((a 42) (b a))...b)바인딩하려고 시도하기 때문에 오류가 발생할 수 있으며 (적어도 이것에 바인딩 된 특정 ) 값에 바인딩 된 것으로 가정 할 수 없습니다.baaalet

[일부 다른 변수 (예 : 전역) 변수 a 가 값 (예 :) 에 바인딩 된 5경우 해당 let표현식은 변수 (로컬) a를 전역 값 ( 즉, ) 에 42바인딩하고 바인딩 b합니다 .]a5

그러나에 바인딩 된 다음 의 값에 바인딩 되기 때문에 (let* ((a 42) (b a))...b)반환 됩니다.42a42 ba

Elisp 매뉴얼, 노드 로컬 변수를 참조하십시오 .


댓글에서 @ DoMiNeLa10의 알림에서 업데이트 :

매뉴얼 외에도 help 명령을 사용할 수 있습니다 . "이맥스를 구하는" 모든 다양한 방법 중에서 가장 먼저 배우고 가장 유용한 방법 중 하나입니다.

그리고 대한은 C-h f let*간결하게, 우리에게 알려줍니다 :Each VALUEFORM can refer to the symbols already bound by this VARLIST.


여기서 질문하는 데 아무런 문제가 없지만 Emacs에 그러한 질문을 한다면 자신 에게 호의를 베풀 것 입니다. 그냥 사용 , 매뉴얼의 정보 브라우저를 열려면 선택 매뉴얼 및 사용 조회 (완공) 인덱스에. 이를 다루는 노드로 직접 이동합니다.C-h iElispi let*let*

(그리고 수천 명의 기고자들이 많은 시간과 노력을 쏟아 부어 정확하고 완전하게 해왔 기 때문에이 매뉴얼은 일반적으로 여기에서 할 수있는 것보다 더 나은 것을 다루고 있습니다.)


또한 사용 태그이 질문과 답변이 사이트를 검색 할 수 있습니다 let-binding: 그냥 넣어 [let-binding]검색 필드에. (이 질문이 중복인지 확인하기 위해 지금 할 것입니다 ...)


위 예제에서는 오타가 있는데, b이는 글로벌에 바인드되어 5와 같습니다 a. let대신 읽어야 합니다let*
jue

@jue : 맞습니다; 고마워.
Drew

로 함수에 대해 물어볼 수도 있습니다 F1 f.
DoMiNeLa10

@ DoMiNeLa10 : 참으로; 좋은 지적. 의견은 언제든지 삭제할 수 있으므로 언급 할 수 있도록 답변을 업데이트했습니다. 고마워.
Drew

5

let* 재귀와 같다 let 의미와 같습니다.

(let* ((var1 VAL1)
       (var2 VAL2))
  ...)

처럼

(let ((var1 VAL1))
  (let ((var2 VAL2))
    ...))

이로써 대문자 사용 VAL1VAL2그도 표현 될 수 있음을 나타냅니다.

재귀 let바인딩은 VAL2실제로 의존 한다면 결과를 가져온다 var1. 그 효과는 Drew의 답변 에 이미 설명되어 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.