5.6 Common beginner mistakes
Here are some of the things I’ve seen a lot of students do wrong in writing examples and
skeletons.
Not calling the function by name
A student working on counterchange writes the example
(check-expect
(above (beside )
(beside )))
76 CHAPTER 5. A RECIPE FOR DEFINING FUNCTIONS
This “example” never actually mentions the counterchange function, so DrRacket
doesn’t know what to do with the two pictures. See Section 4.5.2.
The contract, examples, and skeleton must agree on the number, type, and
order of parameters.
For example, suppose I were writing a function that took in a string and two numbers,
and returned an image:
; do-it : string number number -> image
A student writes the example (check-expect (do-it "boojum") "fnord"). This
example violates the contract in at least two ways: it gives the function only a string
rather than a string and two numbers, and it expects the answer to be a string rather
than an image. A correct test case would have to call do-it on a string and two numbers,
and have an image as the “right answer”:
(check-expect (do-it "boojum" 0 3.14)
(circle 10 "outline" "green"))
(check-expect (do-it "blah" 7 32) )
(check-expect (do-it "fnord" 5/3 -6)
(triangle 10 "solid" "blue"))
Another student writes the example
(check-expect (do-it 3 4 "boojum") ). This has the right number of parameters,
and the right return type, but the parameters are in a different order from what
the contract said: the string is third rather than first.
Next, a student writes the skeleton (define (do-it word) ...). Again, this violates
the contract because do-it takes in three parameters, and this skeleton has only
one. A correct skeleton for this function would have to have three parameter names, the
first standing for a string and the second and third standing for numbers, for example
(define (do-it word num1 num2)
...)
Notice how the contract, examples, and skeleton must “match up”:
; do-it: string number number → image
(check-expect ( do-it "blah" 7 32 ) )
(define ( do-it word num1 num2 ) ...)
The function name is the same in all three places. The number and order of parameters
in the contract are the same as the number and order of arguments in each test case,
which are the same as the number and order of parameters in the skeleton. The return
type in the contract is the same as the type of the “right answer” in each test case, which
is the same type as the “body” expression which will eventually replace the “. . . ” in the
skeleton.
5.6 มือข้อผิดพลาดนี่คือสิ่งที่ได้เห็นมากนักเรียนไม่ถูกต้องในการเขียนตัวอย่าง และโครงกระดูกไม่เรียกฟังก์ชัน โดยชื่อนักเรียนทำงานบน counterchange เขียนตัวอย่าง(เครื่องหมายคาดหวัง(ด้านบน (ด้านข้าง)(ด้านข้าง)))76 บท 5 สูตรสำหรับฟังก์ชันที่กำหนดนี้ "อย่าง" ก็กล่าวถึงฟังก์ชัน counterchange, DrRacket ดังนั้นไม่รู้จะทำอะไรกับสองภาพ ดูหัวข้อ 4.5.2สัญญา ตัวอย่าง และโครงกระดูกต้องการหมายเลข ชนิด และลำดับของพารามิเตอร์ตัวอย่าง สมมติว่า ฉันได้เขียนฟังก์ชันที่ใช้ในสายอักขระและตัวเลข 2และคืนรูป:; ทำมัน: หมายเลขหมายเลขสาย -> รูปภาพนักเรียนเขียนตัวอย่าง (กาคาดหวัง (ทำมัน "boojum") "fnord") นี้ตัวอย่างละเมิดสัญญาอย่างน้อยสองวิธี: ให้ฟังก์ชันสายอักขระเท่านั้นแทนที่สายอักขระ และตัวเลขสอง และคาดว่าคำตอบจะเป็นสตริงที่ค่อนข้างกว่ารูป กรณีแบบทดสอบถูกต้องจะต้องเรียกทำมันในสายอักขระและตัวเลข 2และมีภาพเป็น "คำตอบถูก":(เครื่องหมายคาดหวัง (ทำมัน "boojum" 0 3.14)(วงกลม 10 "เค้าร่าง" "กรีน"))(เครื่องหมายคาดหวัง (ทำมัน "ของ" 7 32))(เครื่องหมายคาดหวัง (ทำมัน "fnord"-6 5/3)(สามเหลี่ยม 10 "ของแข็ง" "สีฟ้า"))ตัวอย่างเขียนนักเรียนอีก(เครื่องหมายคาดหวัง (ทำมัน 3 4 "boojum")) มีหมายเลขของพารามิเตอร์ชนิดการส่งคืนขวา แต่พารามิเตอร์อยู่ในลำดับแตกต่างจากสิ่งthe contract said: the string is third rather than first.Next, a student writes the skeleton (define (do-it word) ...). Again, this violatesthe contract because do-it takes in three parameters, and this skeleton has onlyone. A correct skeleton for this function would have to have three parameter names, thefirst standing for a string and the second and third standing for numbers, for example(define (do-it word num1 num2)...)Notice how the contract, examples, and skeleton must “match up”:; do-it: string number number → image(check-expect ( do-it "blah" 7 32 ) )(define ( do-it word num1 num2 ) ...)The function name is the same in all three places. The number and order of parametersin the contract are the same as the number and order of arguments in each test case,which are the same as the number and order of parameters in the skeleton. The returntype in the contract is the same as the type of the “right answer” in each test case, whichis the same type as the “body” expression which will eventually replace the “. . . ” in theskeleton.
การแปล กรุณารอสักครู่..