SICP에서 Exercise 1.6에 대한 설명은 무엇입니까?
저는 이제 막 SICP를 통해 작업을 시작하고 있습니다 (내 혼자서, 이것은 수업이 아닙니다). 그리고 며칠 동안 운동 1.6으로 고군분투 해 왔지만 알아낼 수없는 것 같습니다. 이것은 Alyssa가 다음 과 같이 if
에서 다시 정의한 것 입니다 cond
.
(define (new-if predicate then-clause else-clause)
(cond (predicate then-clause)
(else else-clause))
그녀는 몇 가지 간단한 경우에 성공적으로 테스트 한 다음이를 사용하여 제곱근 프로그램을 다시 작성합니다 (에서 잘 작동 함 if
).
(define (sqrt-iter guess x)
(new-if (good-enough? guess x)
guess
(sqrt-iter (improve guess x)
x)))
그런 다음 질문은 "Alyssa가 이것을 사용하여 제곱근을 계산하려고하면 어떻게됩니까? 설명하십시오."라고 묻습니다. [필요한 경우, 나는 다른 절차 (재현 행복 해요 good-enough?
, improve
그냥 알려, 등).]
이제 무슨 일이 일어나는지 압니다. 절대 값을 반환하지 않습니다. 이는 프로그램이 무한히 반복된다는 것을 의미합니다. 왜 이런 일이 발생하는지 설명 할 수 없습니다. 미묘한 차이가 존재 if
하고 new-if
나를 피하고 있습니다. 모든 도움을 주셔서 감사합니다.
new-if
함수입니다. 함수가 호출 될 때 Scheme이 인수 목록으로 가장 먼저하는 일은 무엇입니까? 모든 인수를 평가 합니다 .
new-if
절차이며, 반응식 그래서 전에도 실용적 차 평가 (1.1.5) 사용 new-if
되어 실제로는 우선 인자를 평가할 수 있으며, 수행, guess
및 (sqrt-iter (improve guess x) x)
. 후자의 인수가 새 new-if
프로 시저 를 호출하는 재귀라는 것을 알 수 있습니다 . 이것이 무한 루프가 발생하는 방식입니다.
일반 if
필요가 인수 먼저, 그냥 길을 따라 갈 평가하지,이 사이의 차이 if
와 new-if
. :)
우선 적용 주문 평가와 일반 주문 의 차이 를 이해해야합니다 . Lisp는 적용 순서를 사용하지만 조건식은 일반 함수와 달리 평가됩니다 ( sicp 장 1.1.6 ) :
(if <predicate> <consequent> <alternative>)
if 표현식을 평가하기 위해 인터프리터
<predicate>
는 표현식 의 일부를 평가하여 시작 합니다. 경우<predicate>
실제 값으로 평가는 인터프리터는 다음을 평가<consequent>
하고 그 값을 반환합니다. 그렇지 않으면를 평가하고<alternative>
그 값을 반환합니다.
예 1.6. 새로운 경우 :
(define (new-if predicate then-clause else-clause)
(cond (predicate then-clause)
(else else-clause)))
'if-statements'와의 차이점 : if- 문은 술어-> 결과-> 대안에서 하나씩 평가합니다.
그러나 'new-if'는 모든 매개 변수를 평가해야합니다 (즉, 'else-clause'가 처음에 평가된다는 의미입니다 !!).
따라서 이러한 매개 변수 중 하나가 반복 루프로 자신을 호출 할 때 무한 루프가 발생합니다.
참고 URL : https://stackoverflow.com/questions/1171252/whats-the-explanation-for-exercise-1-6-in-sicp
'Programing' 카테고리의 다른 글
CURL을 통해 모든 기기에 Firebase 알림을 어떻게 보내나요? (0) | 2020.12.11 |
---|---|
유형이 "단순"유형인지 어떻게 알 수 있습니까? (0) | 2020.12.11 |
ASP.NET MVC 2 용 사용자 지정 멤버 자격 공급자는 어떻게 만듭니 까? (0) | 2020.12.11 |
실수로 체크 아웃 한 후 변경 사항을 되 찾으시겠습니까? (0) | 2020.12.11 |
지정된 리포지토리의 Git 분기로 Jenkins Choice 매개 변수를 동적으로 채우기 (0) | 2020.12.11 |