2014-04-02 5 views
12
function A: Boolean; 
function B: Boolean; 
내가 (실수로)이 쓴

대신 그부울 식 (부작용 포함)이 문으로 충분하지 않은 이유는 무엇입니까?

A or B; 

:

if not A then 
    B; 

컴파일러는 첫 번째 양식을 거부를, 그 이유를 궁금?

단락 회로 평가에서 그들은 둘 다 똑같은 것을 할 것인가?

설명 : 왜 언어가 내 표현을 진술로 허용하도록 설계되지 않았는지 궁금합니다.

+0

실은, IMHO가 전혀 읽을 수 없기 때문에 이것이 허용되지 않기 때문에 기쁩니다. 흥미로운 질문. – jpfollenius

+1

델파이는 아직 PHP의 프랙탈이 아닙니다. –

답변

5

단순히 컴파일러가 statement을 예상하고 제공 한 식은 문이 아니기 때문에.

documentation을 참조하십시오. 유효한 진술 목록을 찾을 수 있습니다. 해당 목록에서 귀하의 표현을 찾을 수 없습니다.

왜 언어 디자이너가 그러한 표현식을 성명서로 사용하지 않기로 결정했는지 (지금 삭제 된) 의견에 질문했습니다. 그러나 그 질문은 목적이 없음을 암시합니다. 디자이너가이 작업을하지 않기로 결정한 것은 사실 그 자체입니다. 오히려 그들은 처음부터 그것을하는 것을 결코 고려하지 않습니다. 언어는 일반적으로 특정 문제를 해결하도록 설계되었습니다. 설계자가 그러한 표현을 진술로 취급하는 것을 결코 고려하지 않은 것은 완벽하게 그럴듯합니다.

5

첫 번째 형식은 문이 아닌 부울 값으로 계산되는 식입니다.

9

첫 번째 표현식입니다. 표현식이 평가됩니다. 식은 눈에 보이는 부작용이 없습니다 (예 : 변수 읽기 또는 쓰기). 표현식의 두 피연산자는 모두 함수이며 부작용이있을 수 있지만 부작용이 생길 경우 명령문을 실행해야합니다.

두 번째 문장입니다. 표현식의 결과를 비교하고 평가에 따라 다른 함수를 호출합니다.

이 경우 혼란스러운 부분은 Delphi가 함수의 결과를 무시하고 함수로 실행하도록 허용한다는 것입니다. 따라서 A or B에 대해서도 마찬가지입니다. 하지만 그건 허용되지 않습니다. 그 행동이 애매하기 때문에 위대하다. 예를 들어, yo에 지연 평가를 사용하도록 설정 한 경우 그리고 A는 사실로 평가되고, B는 예 또는 아니오로 평가됩니다.

+2

게으른 평가에 따라 'B'를 애매하게 실행하는 유효한 구문을 만들 수 있다는 점을 지적 해 두는 것이 가치가 있습니다. 'if (A or B) then ... '등 –

+0

"표현식에는 (변수를 읽거나 쓰는 것과 같은) 부작용이 없습니다." 변수를 쓰는 것은 가시적 인 부작용입니다! 물론 함수 호출도 표현식 일뿐 아니라 부작용이있을 수 있습니다. – munificent

2

델파이는 파스칼입니다. Pascal 언어는 Nicklaus Wirth에 의해 고안되었고 1968 년에 출판되었습니다. 사용자 매뉴얼과 보고서의 사본은 1978 년부터 작성되었습니다.이 도구는 교육 언어와 주어진 컴퓨터에서 쉽게 구현할 수있는 두 가지 목적을 염두에두고 설계되었습니다 . 이것에서 그는 장관으로 성공적이었다.

Wirth은 다른 언어 (Fortran, Cobol 및 특히 Algol 포함)를 잘 알고 있으며 특정 목적을 염두에두고 일련의 신중한 선택을했습니다. 특히 그는 '행동'의 개념을 '가치'와 조심스럽게 분리했다. 파스칼의 '액션'은 프로 시저 호출을 포함하여 언어로 된 문장입니다. '값'에는 함수 호출이 포함됩니다. 이 점과 다른면에서이 언어는 Algol과 매우 유사합니다.

액션과 값을 선언하고 사용하는 구문은 신중하게 분리되어 있습니다.언어와 함께 제공된 라이브러리에는 일반적으로 '부작용'이 없습니다. 프로 시저에서는 사물과 표현식이 값을 계산합니다. 예를 들어 'read'는 값이 아니라 파일을 통해 전달되기 때문에 함수가 아니라 프로 시저이지만 'eof'는 함수입니다.

파스칼의 대량 판매용 버전은 1980 년대 중반에 볼랜드에서 창안되었으며 Windows 용 Turbo Pascal과 델파이가되었습니다. 언어가 많이 바뀌었고 Wirth이 디자인 한 것만 큼 순수하지는 않습니다. 이것은 살아남은 기능 중 하나입니다.

덧붙여서, 파스칼은 단락 회로 평가가 없었습니다. 힙 메모리와 세트가 있지만 오브젝트는 없습니다. 그들은 나중에왔다.