2009-09-25 4 views
4

종종 Tcl에 관해 읽을 때 (예 : http://antirez.com/articoli/tclmisunderstood.html) "모든 것이 명령입니다"라고 읽습니다. 때로는 Tcl과 같은 다른 언어가 "명령 언어"와 어떻게 다른지 들어도됩니다.명령과 명령문의 차이점은 무엇입니까

제게 다른 언어로 저의 배경 지식을 전하기 위해이 "명령"을 진술로보고 있습니다. 명령과 명령문의 차이는 정확히 무엇입니까?

+0

감사합니다. PS ... 방금 Ousterhout (및 Jones ')의 "Tcl 및 Tk Toolkit"제 2 판 –

+0

사본을 얻었습니까? 응답에서 찾고 있던 대답을 찾았습니까? – RHSeeger

답변

7

전통적으로 Tcl에서 "모든 것이 명령입니다"는 말은 다음과 같은 것이 없음을 의미합니다. "예약어"명령 또는 변경할 수없는 시스템에 의해 정의 된 명령. 구문의 일부와 (대부분의 언어에서 "만약"및 기타 제어 구조 등) 덮어 쓸 수 없습니다 명령 같은 건 없다

command ?arg1? ... ?argN? 

:은 Tcl 코드의 모든 단일 실행 조각 형식입니다 . 약간 다른 것으로 "if"명령을 재정의하는 것은 전적으로 가능합니다.

proc while {expression body} { 
    for {} {[uplevel 1 expr $expression]} {} { 
     uplevel 1 $body 
    } 
} 

위의 코드 검증되지 않은 것을 ...하지만 일반적인 생각을 보여줍니다

는 예를 들어, "동안"으로 재정의 할 수있다.

+1

나는이 대답이 내 것보다 낫다고 생각한다. –

1

저는 명령문이 명령문에서 실행하는 명령이라고 말하고 싶습니다. 다른 명령문은 동일한 명령을 실행할 수 있습니다 (일반적으로 다른 인수로). 명령은 작업입니다. 명령.은 조작의 특정 호출입니다.

-1

나는 명령이 코드의 명령이고 명령문이 여러 명령을 실행할 수 있다고 생각하지만 결국에는 true 또는 false로 평가됩니다.

+0

Tcl에 대해 구체적으로 묻는 질문 문맥에서 당신이 말하는 것은 의미가 없습니다. Tcl의 문은 반드시 true 또는 false로 평가되지는 않습니다. –

3

명령은 다른 언어에서 함수, 루틴 또는 예약어를 호출하는 것으로, "proc"명령 또는 C 또는 기타로 정의 할 수 있습니다. 명령.은 명령 호출입니다. 전통적인 정의를 사용하면 Tcl의 명령문은 0 개 이상의 인수가 오는 명령입니다.

다음 코드 고려 : 1라는 명령을 정의

1 proc hello {string} { 
2  puts "hello, $string" 
3 } 
4 hello "world" 

라인 "안녕하세요", 라인 4는 "안녕하세요"명령을 호출하는 문입니다.

사실, Tcl의 일부 기사에서는 명령 이름과 명령 호출을 모두 의미하는 "명령"이라는 용어를 사용합니다. 나는 그것에 너무 매달리지 않을 것이다. 명령문을 명령 호출이라고 생각하면 문제가 없습니다.

"모든 것이 명령입니다"라는 문구가 표시되면 예약어가 없다는 것을 의미합니다. 언어 구문이나 키워드와 같은 것 - if, return, exit, break, while ... -은 모두 명령입니다. 그들은 모두 똑같이 취급 될 수 있습니다. 이름을 바꿀 수 있고, 제거 할 수 있고, 다시 구현할 수 있습니다.

+0

IMO 함수 호출 (인수가 있거나 없음)은 명령입니다. 따라서 4 행은 명령문과 명령입니다. –

+1

nitpick alert :'else'는 명령이 아닙니다. 'if'에 대한 논의입니다. –

+0

@glenn : 감사합니다. 나는 그 대답에 고정시켰다. –

1

이것은 주로 의미론의 문제라고 생각합니다. 따라서 이러한 개념을 이해하는 데 약간의 차이가있을 수 있습니다. 즉, this Wikipedia article은 주제에 대한 내 직관과 일치하는 지침을 제공합니다.

진술은 명령형 프로그램의 단위입니다. 특히 명령문 료자에 의해 종료되는 단위입니다. C에서는 세미콜론입니다. 또는 파스칼 및 그 자손에서 문 분리 기호로 구분 된 단위입니다. 제 생각에 파스칼의 대부분의 맛은 세미콜론이기도합니다.

명령은 작업을 수행하는 함수 호출 또는 키워드와 같은 작업입니다. 위키 피 디아 (Wikipedia)의 기사는 그것들을 동사에 비유합니다.

변수 선언은 명령문이지만 명령이 아닐 수도 있습니다. 그리고 할당 연산자를 통한 변수 할당은 다른 사람이 아닌 일부의 명령으로 간주 될 수 있습니다. 때로는 할당 명령이라고도하지만 때로는 그렇게하는 것은 아닙니다. TCL처럼 함수 호출처럼 보이면 명시적인 동사 set이 있기 때문에 더 '명령과 같은'것입니다.

또한 명령문은 여러 명령으로 구성 될 수 있습니다. 예를 들어, C에서 쉼표로 결합 된 여러 함수 호출을 생각해보십시오. 하나의 세미콜론을 가지고 하나의 값을 반환하기 때문에 나는 한 문장을 고려할 것입니다. 그러나 각각의 개별 호출은 명령으로 간주 될 수 있습니다.

명령문/명령 용어를 고려할 때 명령문은 일반적으로 셸 및 스크립트를 참조하는 반면 명령문은 명령형 프로그램을 일반적으로 참조한다는 점을 명심해야합니다. 따라서 bash와 같은 명령 셸을 사용할 때 명령에 대해 설명합니다. 필자가 bash 스크립트를 작성했다면 차이는 대체로 학문적이지만 명령문 프로그램이 아니라 명령 스크립트라고 생각했습니다.

초기 스크립팅 언어 중 하나 인 TCL은 아마도 C 및 Pascal과 같은 컴파일 된 언어와 비교하여 쉘 (희망)에서 실행되는 인터프리터 스크립팅 언어와 구별하기를 원했습니다. 예를 들어 Perl은 다소 나중에 인기를 얻었지만 대개는 구별되지 않습니다.

그러나 사람들은 종종 Perl 프로그램보다는 Perl 스크립트를 참조하고, TCL에서도 마찬가지입니다.

필자는 나의 대답이 구별을 분명히하기 위해 아무 것도하지 않았을지도 모른다는 두려움을 가지고 있지만 도움이되기를 바랍니다.

0

저는 '명령문'이라는 용어가 프로그래밍에 사용되는 이유에 대해 자주 궁금해했습니다. 그 이유는 명령이 명령이고 진술이 아닌 자연어로 된 단어의 의미와 일치하지 않는 것처럼 보이기 때문입니다. 직관적으로 나는 단어 명령을 선호합니다.

Jeremy Bourque는 모든 프로그래밍 블록이 모든 선언을 포함하는 선언 섹션과 모든 명령문이 포함 된 명령 섹션으로 나뉘어져 있기 때문에 변수 선언은 다른 언어에도 적용될 수 있다고 제안했기 때문에 변수 선언은 명령문으로 간주되지 않습니다. . Jeremy Bourque가 위에서 말한 것처럼 문은 세미콜론으로 구분됩니다. 하나의 명령문에서 둘 이상의 명령을 사용할 수 있다고 생각하지 않습니다 (C에서와 같이). 물론 하나 이상의 하위 명령문이있는 복합 명령문은 제외합니다. 그래서 저는 파스칼에서 명령과 구문 동의어를 고려할 수 있다고 생각합니다.

그러나 Pascal 구현에서 컴파일러 및 개발 환경 (IDE)에 제공되는 명령에는 종종 단어 명령이 사용됩니다. 소스 코드에서 명령 (명령문)에 대해 다른 단어를 사용하는 것이 유용 할 수 있습니다. 아마도 파스칼을 비롯한 초기 언어를 개발 한 사람들은 명령을 즉각 처형 할 것으로 생각했습니다. 따라서 컴파일 된 언어와 스크립트 언어의 차이점에 대한 Bourque의 말은 나에게 논리적이라고 할 수 있습니다.

관련 문제