Programming Assignment 1: Functional Programming with Lists

$24.99 $18.99

A list is the only data structure in all Lisp-like languages, including our SICP-flavoured Scheme. Whether it be a complicated data structure, or a sophisticated compiler, everything can be implemented using lists. Having programmed and practiced with numbers and lambdas in the labs, this take-home assignment is aimed at making you acquainted with using lists…

5/5 – (2 votes)

You’ll get a: zip file solution

 

Categorys:

Description

5/5 – (2 votes)

A list is the only data structure in all Lisp-like languages, including our SICP-flavoured Scheme. Whether it be a complicated data structure, or a sophisticated compiler, everything can be implemented using lists. Having programmed and practiced with numbers and lambdas in the labs, this take-home assignment is aimed at making you acquainted with using lists for implementing simple Unix utilities that involve processing strings. You will basically be implementing two Unix utilities: `lgrep` and a crude form of `diff`.

**Plagiarism warning:**

> Note that this assignment is supposed to be done individually; groups and discussions are only for the labs.

> Specifically, you should neither show code to each other nor put it up on web.

> We will be using sophisticated plagiarism checkers and any significant detection will lead to heavy penalization.

> You are free to approach the TAs or the instructor for any queries/doubts.

> Discussions on the mailing list are encouraged and not dis-allowed.

Problem 1

You are to write a simple pattern-matching program in Scheme. Your initial solution should consist of a `sublist` function that takes two lists as arguments. It should return true ( t) if the first list appears as a contiguous sublist somewhere within the second list, and false ( f) otherwise:

“`

(sublist ‘(c d e) ‘(a b c d e f g))

==> t

(sublist ‘(a c e) ‘(a b c d e f g))

==> f

(sublist ‘(f) ‘(a b c d e f g))

==> t

“`

Once you have this working, use it to build an `lgrep` function that returns the “lines” within a list that contain a given sublist:

“`

(lgrep ‘(c d e) ‘((a b c d e f g)

(c d c d e)

(a b c d)

(h i c d e k)

(x y z)))

==> ((a b c d e f g) (c d c d e) (h i c d e k))

“`

You may assume that the argument lists will not contain further nested lists.

Problem 2

You are to write a Scheme function `lcs` to compute the longest common sublists of two given lists. For example:

“`

(lcs ‘(a b c b d a b) ‘(b d c a b a))

==> ((b c b a) (b d a b) (b c a b))

“`

The order in which the subsequences are printed is not important; we will take care of the same in our scripts.

This is essentially the problem solved by the Unix program `diff`, except that `diff` uses whole lines instead of symbols as list elements, and instead of printing a longest common sublist, it prints the lines that are not in that sublist — the elements that must be inserted, deleted, or changed to transform the first list into the second.

NB: Don’t feel compelled to achieve the lowest possible time bound (though that’s always nice). Diff uses a couple of data structures, including a hash table, that you may have difficulty building in Scheme, so for now we won’t worry about efficiency.

Submission

You need to submit a single file named `rollnum-asgn1.scm`, where `roll-num` should be your roll number in small letters. This file must have the functions `sublist`, `lgrep` and `lcs` defined. Any other utility functions that you use should be modularized and invisible to the outside world.

Evaluation

We will be using a testcase-based autmated evaluation to check various standard as well as corner cases. The assignment carries a total of 8 marks, and the testcases will be distributed equally over the same. You will get marks based on how many testcases does your submission pass.

*Note:* You are required to use only the functional features of Scheme; functions with an exclamation point in their names (e.g. set!) are not allowed.

Programming Assignment 1: Functional Programming with Lists
$24.99 $18.99