26. 예제 35 "모든 컴퓨터는 직렬 인터페이스 포트를 가졌다. 어떤 마이크로 컴퓨터들은 병렬 포트를 가졌다. 따라서 어떤 마이크로 컴퓨터들은 직렬 포트와 병렬 포트 두가지를 다 갖는다.“ M(x): x는 마이크로 컴퓨터이다. S(x) : x는 직렬 포트를 갖는다. P(x) : x는 병렬 포트를 갖는다.
35. is(animal(rabbit)) yes is(eat(wildcat, grass)) no which(x: eat (x, fish)) bear raccoon which(x, y: eat(x, y) and plant(y)) little-fish algae rabbit grass deer grass which(x:prey(x)) fish little-fish fish raccoon fox rabbit deer deer
36. 재귀 예제 39의 생태학 데이터베이스에서 “y는 x의 먹이 사슬에 있다.” In-food-chain(x, y) x가 y를 직접적으로 먹는다. X가 어떤 거을 먹고 그것은 어떤 것을 먹고 그것은 어떤것을 먹고…. 그거은y를 먹는다. 다시 말하면 2’. X는 z를 먹고 y는 z의먹이 사슬에 있다.
37. 먹이 사슬에 대해 Prolog 규칙은 In-food-chain(x, y) if eat(x, y) In-food-chain(x, y) if eat(x, z) and in-food-chain(z, y)
38. 예제 40 Which (y: in-food-chain (bear, y)) 1. Fish 2. Raccoon 3. Fox 4. Deer 5. Little-fish 6. Algae 7. Fish 8. Little-fish 9. Algae 10. Rabbit 11. Grass 12. Grass In-food-chain (bear, y) if eat(bear, y)
39. 1 부터 4까지는바로 얻어낼수 있다. 재귀적 경우로 이동하면, in-food-chain(bear, y) if eat(bear, z) and in-food-chain(z, y) z를 “fish”일 때 재귀가 발생한다. (75p참고)
45. 예제 42 {x – 1 > 0} X = x – 1 {x > 0} {x -1 > 0}x = x – 1{x > 0} 에서 사후 조건은 x > 0이다. 사후 조건을 통해 x – 1을 x로 치환하면 사전 조건은 X – 1 > 0 또는 x > 1이 된다.
46. 예제 43 X와 y의 교환하는 다음 프로그램 세그먼트의 정확성을 검증하라 Temp = x X = y Y = temp
47. {y = 1b, x = a} Temp = x {y = b, temp = a} X = y {x = b, temp = a} Y = temp {x = b, y = a}
48. 조건부 규칙 조건부 서술(conditional statement) If condition B then P1 else P2 End if
49. 예제 45 {n = 5} If n >= 10 then Y = 100 Else Y = n + 1 End if {y = 6} {n = 5 그리고 n < 10} y = n + 1 {y = 6}
50. 예제 46 Max(x, y) 두개의 값 x와 y중 최대값을 구하는 다음의 프로그램 세그먼트의 정확성을 검증하라 {x != y} If x > y then Max = x Else Max = y End if
51. {x != y and x >= y} max = x {(x > y and max = x) or (x < y and max = y)} {x != y and x < y} max = y {(x > y and max = x) or (x < y and max = y)} (x > y ∧ x = x) ∨ (x < y ∧ x = y) 두번째 논리합은 항상 거짓이기 때문에 이것은 (x > y ∧ x = x) 와 동치이다.