내용으로 건너뛰기
체계적인 프로그래밍 소개 – 6주차

체계적인 프로그래밍 소개 – 6주차

6주 차는 확실히 MOOC의 피로를 느끼기 시작하는 시기입니다.

8min read

나는 성실하게 수업을 따라가고 있지만, 할당된 수업 시간에 대한 "압박감", 내 작업을 확인하는 교수, 나와 대화하는 급우들이 없으면 항상 온라인 수업을 한 달 반 동안 힘들어하는 것 같습니다. 하지만 두려워하지 마세요, 저는 6주차를 무사히 마쳤고 언제나처럼 철저한 요약을 여러분께 드리고 있습니다! 체계적인 프로그램 설계 소개의 6 주차는 상호 참조의 아이디어를 다룹니다 ... 자 간다!

Lesson 1: More Helpers & Mutual Helpers

이 강의를 시작할 때 HtDF 레시피의 목적은 극복할 수 없어 보이는 큰 문제를 더 작고 관리하기 쉬운 문제로 나누는 것임을 상기합니다. 이 알림은 이번 주에 문제를 분류하는 방법뿐만 아니라 데이터 유형과 기능도 설명하는 방법을 설명하기 때문에 잠시 후에 더 의미가 있습니다! 강좌 강사는 이전 강좌에서 우리는 항상 데이터타입과 함수를 전체적으로 유지했지만, 6주차에는 모든 문제를 분해한 것과 유사하게 그것들을 분해하는 방법을 배울 것이라고 설명합니다. 또한 자체 통합 도우미로 완성되는 새로운 종류의 임의 크기 데이터를 학습할 것이라는 알림도 받았습니다.

Lesson 2: More Helpers – Function Composition

이 수업은 여러 수업에 걸쳐 있는 큰 연습 문제를 시작합니다 – 이러한 이유로 연습 문제의 모든 단계를 자세히 설명하는 것이 중복되고 흥미롭지 않은 것처럼 보이기 때문에 여기에서 제 메모가 약간 부족합니다. 😉

더 많은 도우미 – 기능 구성

함수를 여러 부분으로 나누는 것에 관한 Lesson 1의 개념과 관련하여 이것은 완벽한 예입니다. 문제를 더 작은 내부 문제로 분류된 것으로 간주할 때 HtDF에서는 이를 함수 구성 문제(즉, 사용할 데이터에 대해 두 개의 별개의 작업이 있는 경우)라고 합니다. 분명히, 이것은 달성하기가 매우 쉽습니다, 왜냐하면, 당신이 그것을 추측했기 때문에, 그것에 대한 템플릿이 있기 때문입니다! Racket에는 Function Composition Template이 있으며, 2 단원에서는 사용법을 안내합니다. 다음은 간단한 예입니다 : (define (arrange-images loi) (layout-images (sort-images loi)))

위에서 볼 수 있듯이 하나의 정의에 두 개의 함수가 내장되어 있습니다. 정의를 작성한 후에는 항상 그렇듯이 아무것도 잊지 않도록 위시리스트 항목을 작성하라는 지시를 받습니다. J

학습 3: 이미지 목록 레이아웃 지정

이 단원에서는 이전 단원의 예제를 계속합니다. 이 단원에서 검토하는 가장 중요한 사항은 함수를 작성한 후 MATCHING check-expects가 통과하는지 확인하는 것입니다. 참고: 불완전한 함수에서 검사 기대치가 실패하는 경우.

레슨 4 : 더 많은 도우미 – 목록에서 작업

다시 말하지만, 이 수업에서 한 가지 멋지고 짧은 정보!

함수를 코딩하는 경우 목록에서 작업해야 하는 경우 새 도우미 함수를 만들어야 합니다.

네, 4과까지는 여기까지입니다!

레슨 5: 더 많은 도우미 – 도메인 지식 이동

이 수업은 매우 흥미로운 초점을 가지고 있습니다 – Racket에서 프로그래밍하는 도중에 지식 영역을 이동하려면 도우미 함수를 생성해야 합니다. 알아요, 뭐?! "이미지 정렬에서 이미지 크기 비교로 변경할 때 이것은 도메인 지식 변화입니다." 따라서 본질적으로 목록의 항목으로 다른 작업을 수행 할 때 새로운 함수를 만듭니다. 물론, 이것은 이 과정에서 내가 가장 좋아하지 않는 것 중 하나인데, 왜냐하면 나는 그것이 많은 추가 코드를 생성한다고 느끼기 때문에, 그것은 더 많을 수 있습니다... 컴팩트?, 나는 그것이 프로그래밍의 논리를 깨뜨리고 초보자가 더 쉽게 만들 수 있다는 것을 이해합니다. (내가 방금 그렇게 말했던가? 내가 더 이상 초보자가 아니라는 뜻인가요? 맙소사, 그러지 않았으면 좋겠어! 하하.)

추가 사항:

테스트를 위해 항목을 반복적으로 사용하는 경우 일정하게 만드십시오! 더 쉽고 실수를 피하는 데 도움이 됩니다.

레슨 6: 더 많은 도우미 – 마무리

이론적으로 여기에서 도우미의 마법이 일어납니다. 마지막 도우미 함수를 작성하고 코드를 실행하면 원래 함수가 도우미가 작성되기를 기다리고 있었기 때문에 모든 테스트가 마술처럼 통과해야합니다!

No?

글쎄, 그렇다면 단순히 오타가 있을 수 있으므로 먼저 테스트에 오류가 있는지 확인해야 합니다. 그것이 문제가 아니라면, 글쎄, 당신은 당신의 기능을 디버깅해야합니다.

또한! 이것으로 6주 차의 "전반부"가 끝나기 때문에 몇 가지 간단한 마무리 메모가 있었습니다.

  1. 이번 주에 배운 새로운 도우미 규칙을 모두 기억하세요! 나중에 필요할 것입니다.
  2. Macro Notion을 활용하는 것을 두려워하지 마세요 – 도우미 규칙을 사용하여 주요 기능에서 작업을 분할하고 삶을 더 쉽게 만드십시오!!

Lesson 7: List Abbreviations

I. 사랑했다. 이. 수업.

진지하게, 지금까지 라켓에서 목록 쓰기는 혐오감이었습니다! 이 수업에서는 Dr. Racket의 언어 정의를 "Basic Student Language"에서 "Basic Student Language with List Abbreviations"로 이동하라는 지시를 받았습니다. 감사하다. 친절.

이것이 프로그래밍에 관한 한 의미하는 바는 목록을 작성할 때 더 이상 단점이 필요하지 않다는 것입니다 !! 이제 목록이 의미가 있습니다!! 목록을 작성할 때 이제 (목록 "a" "b" "c")와 같이 작성할 수 있습니다. 점수!

그러나 여전히 단점을 사용할 수 있으며 경우에 따라 더 의미가 있다는 점에 유의하는 것이 중요합니다. 예를 들어 목록에 추가하는 경우 다음과 같이 말하고 싶을 것입니다.

(define L1 (list “b” “c”))
(cons “a” L1)

생산하기 위해: (목록 "a" "b" "c").

그 이유는 append를 사용하려고 하면 두 개의 LISTS를 입력해야 하며, 그러면 두 LISTS의 요소가 포함된 하나의 목록이 생성되기 때문입니다.

Lesson 8: Mutually Recursive Data

상호 재귀 데이터는 Racket에서 유형 주석에 두 개의 사이클이 있는 데이터로 정의됩니다. 이 유형은 모든 요소가 하위 요소도 포함할 수 있기 때문에 임의의 arity 트리로 알려져 있습니다. 이 임의의 품질은 요소가 너비와 높이를 통해 확장되는 두 요소 모두에서 임의적일 수 있음을 의미합니다. 내가 말하는 것의 예는 다음과 같습니다.

Mutually Recursive Data

Racket에서 임의의 arity 트리를 만들 때 다음을 사용합니다. 목록! (충격적이죠?)

예를 들어, 요소에 대한 설명에서 ListOfElement(주기)로 이동하는 것은 상호 참조이며, 이는 "임의" 주기로 이해될 수 있습니다. 따라서 참조 주기를 거치고 화살표가 참조 주기가 시작된 위치로 돌아갈 때 이를 "상호 참조"라고 합니다.

Lesson 9: Templating Mutual Recursion

여기에 한 가지 중요한 팁이 있습니다!

프로그램을 작성할 때 상호 재귀 데이터 유형에 대한 템플릿을 함께 작성하십시오. 왜? 더 쉽습니다! 평범하고 간단합니다. J

Lesson 10: 상호 재귀 데이터에 대한 함수 – 1부

상호 복구 데이터에서 작동하는 2+ 함수가 있는 경우 함께 작성할 뿐만 아니라 동일한 예제, 서명 및 목적을 사용하여 즉시 모두 작성해야 합니다!

예를 들면 다음과 같습니다.

(define (sum-data—element e) 0)
(define (sum-data—loe loe) 0)

이 작업을 수행할 때... 기본 사례 예제를 잊지 말고 모든 상호 재귀 및 자체 참조 호출의 이름을 즉시 바꾸는 것을 잊지 마십시오. 이 두 가지 항목 모두 나중에 두통과 마음의 고통을 *톤* 덜어줄 것입니다. 약속.

다시... 언제나처럼... 자연 재귀를 신뢰하는 것을 잊지 마십시오.

Lesson 11: 상호 재귀 데이터에 대한 함수 – 2부

Two big takeaways here:

  1. 기본 케이스는 참조주기가 중지되는 곳입니다. (나는 이것이 매우 가슴 아픈 일이라고 생각했다. 전에는 이런 식으로 생각해 본 적이 없지만 정말 사실이다!)
  2. 두 가지 기능이 있는 명명 규칙에 주의하십시오. 명확하고 체계적으로 유지하십시오.

다음은 임의의 arity 트리를 사용하는 일주일 동안의 마지막 기능입니다 .... 역추적 검색!

저게 뭐죠? 주어진 값/이름을 가진 요소에 대해 트리를 검색할 때입니다. 여기서 기억하는 것이 중요합니다 나무의 잎은 위의 잎을 따라 검색되므로 부모 "안에서" 발견된다는 것입니다. 역 추적 검색은 트리의 가지 끝에 도달하여 찾고있는 요소 ( "실패한 잎"이라고 함)를 찾지 못하면 다른 가지로 내려 가기 위해 트리에서 BACK UP을 횡단해야하기 때문에 여기에서 작동합니다. 이것은 나뭇가지와 잎이 다 떨어질 때까지 전체 나무를 탐색하는 동안 반복됩니다!

Week 6 Summary

이번 주는 모든 곳에서 일어났고, 앞서 언급했듯이 단순히 통과하기가 어려운 한 주였습니다. 그러나 전반적으로 개념은 확실히 관리할 수 있다고 생각하며 마지막 2주간의 수업이 기대됩니다. 나의 행운을 빌어 줘!!

질문/의견이 있으신가요?

제 블로그에 자유롭게 댓글을 달거나 Twitter @DokiDara에서 저를 찾아주세요.

작성자: Dara Monasch

데모 요청