## Friday, June 28, 2013

### Chapter 16 - Logic Programming Language

Review Question 1. What are the three primary uses of symbolic logic in formal logic ? - to express propositions, to express the relationships between propositions, and to describe how new propositions can be inferred from other propositions that are assumed to be true. 2. What are the two parts of a compound term ? - functor and and ordered list of of parameters 3. What are the two modes in which a proposition can be stated ? - one in which a proposition is defined to be true and one in which that the proposition is something to be determined. 4. What is general form of a proposition in clausal form ? -B1 U B2 U . . . U Bn C A1 n A2 n . . . n Am 5. What are antecedents ? Consequents ? - Antecedents are right side of a clausal form proposition. Consequent is left side of a clausal form propositions 6. Give general definitions of resolution and unification - Resolution : inference rule that allows inferred propositions to be computed from given propositions, thus providing a method with potential application to automatic theorem proving. Unification : Process of determining useful values for variables. 7. What are the forms of Horn clauses ? - a. Have a single atomic proposition on the left side b. empty left side. 9. What does it mean for a language to be nonprocedural ? - Language in which the programs do not exactly state how a result is to be computed but rather describe the form of the result. Problem Set 1. “All predicate calculus propositions can be algorithmically converted to clausal form”. Is this statement true or false ? Explain. - True. 8. Critically comment on the following statement : “ Logic programs are nonprocedural” - It is true, because logical programs use lots of different processes based on its conditions. If a certain logical requirement is true, then a program will execute the corresponding process, instead of procedurally executing the statements. 9. From a book on Prolog, learn and write a description of a monkey-banana prolem. Why does Prolog allow this problem to exist in its implementation ? - The problem is defined as this : a monkey is in a room. Suspended from the ceiling is a bunch of bananas, beyond the monkey’s reach. However, in the room there are also a chair and a stick. The ceiling is just the right height so that a monkey standing on a chair could knock the bananas down with the stick. The monkey knows how to move around, carry other things around, reach for the bananas, and wave a stick in the air. What is the best sequence of actions for the monkey? It exists to create a variation in output of Prolog. As Prolog is an AI programming language, a variation might be needed in AI output to make them respond relevant to the situation.

### Chapter 15 - Functional Programming Language

REVIEW QUESTION 2. What does a lambda expression specify? => The predicate function is often given as a lambda expression, which in ML is defined exactly like a function, except with the fn reserved word, instead of fun, and of course the lambda expression is nameless. 5. Explain why QUOTE is needed for a parameter that is a data list. => To avoid evaluating a parameter, it is first given as a parameter to the primitive function QUOTE, which simply returns it without change. 6. What is a simple list? => A list which membership of a given atom in a given list that does not include sublists. 7. What does the abbreviation REPL stand for? =>REPL stand for read-evaluate-print loop. 11. What are the two forms of DEFINE? => The simplest form of DEFINE is one used to bind a name to the value of an expression. This form is (DEFINE symbol expression) The general form of such a DEFINE is (DEFINE (function_name parameters) (expression) 13. Why are CAR and CDR so named? => The names of the CAR and CDR functions are peculiar at best. The origin of these names lies in the first implementation of LISP, which was on an IBM 704 computer. The 704’s memory words had two fields, named decrement and address, that were used in various operand addressing strategies. Each of these fields could store a machine memory address. The 704 also included two machine instructions, also named CAR (contents of the address part of a register) and CDR (contents of the decrement part of a register), that extracted the associated fields. It was natural to use the two fields to store the two pointers of a list node so that a memory word could neatly store a node. Using these conventions, the CAR and CDR instructions of the 704 provided efficient list selectors. The names carried over into the primitives of all dialects of LISP. 18. What is tail recursion? Why is it important to define functions that use recursion to specify repetition to be tail recursive? => A function is tail recursive if its recursive call is the last operation in the function. This means that the return value of the recursive call is the return value of the nonrecursive call to the function. It is important to specify repetition to be tail recursive because it is more efficient(increase the efficiency). 19. Why were imperative features added to most dialects of LISP? => LISP began as a pure functional language but soon acquired some important imperative features to increased its execution efficiency. 26. What is type inferencing, as used in ML? => Type inference refers to the automatic deduction of the type of an expression in a programming language. If some, but not all, type annotations are already present it is referred to as type reconstruction. 29. What is a curried function? => Curried functions a function which a new functions can be constructed from them by partial evaluation. 30. What does partial evaluation mean? => Partial evaluation means that the function is evaluated with actual parameters for one or more of the leftmost formal parameters. 32. What is the use of the evaluation environment table? => A table called the evaluation environment stores the names of all implicitly and explicitly declared identifiers in a program, along with their types. This is like a run-time symbol table. 33. Explain the process of currying. => The process of currying replaces a function with more than one parameter with a function with one parameter that returns a function that takes the other parameters of the initial function. PROBLEM SET 8. How is the functional operator pipeline ( |> ) used in F#? => The pipeline operator is a binary operator that sends the value of its left operand, which is an expression, to the last parameter of the function call, which is the right operand. It is used to chain together function calls while flowing the data being processed to each call. 9. What does the following Scheme function do? (define ( y s lis) (cond (( null? lis) ‘ () ) ((equal? s (car lis)) lis) (else (y s (cdr lis))) )) => y returns the given list with leading elements removed up to but not including the first occurrence of the first given parameter. 10.What does the following Scheme function do? (define ( x lis) (cond (( null? lis) 0 ) (( not(list? (car lis))) (cond ((eq? (car lis) #f) (x (cdr lis))) (else (+1 (x (cdr lis)))))) (else (+ (x (car lis)) (x (cdr lis)))) => x returns the number of non-#f atoms in the given list