联系方式

  • QQ:99515681
  • 邮箱:99515681@qq.com
  • 工作时间:8:00-23:00
  • 微信:codinghelp2

您当前位置:首页 >> javajava

日期:2020-04-22 10:44

Lab 5 Functional Programming 2, the Term Project

Function Programming Paradigm

This project must be completed using the Function Programming paradigm:

1.No global variables are allowed; local variables in general are discouraged

2.If you have local variables; they must be immutable

3.No for loops, while loops, or other loops

4.In general, assignment statements are discouraged and should be limited.

Making code easier to read is OK

5.You are encouraged to use lambda functions and higher order functions

6.Function features such as composition, closure, and currying are good

7.Functions should be small. Succinctness and readability are good

8.Recursive programming is good

The Line Editor Project

The project involves coding a simple line editor in Python using FP. If you have taken my CSCI 40 class, this editor is even simpler than that one. However, the design rules are precise - you must create the features exactly as described - do not add, change or delete features. If you don't follow these design guidelines, your program may not perform project test scripts correctly

This is a very primitive editor. This is like an old fashion DOS editor where the user enters a simple command that changes the text file that he is editing. Each command starts with a keyword that indicates the type of operation to perform


Some commands act on one line at a time; others act on the entire file. You can't enter content into a line until the empty blank line is created first. To keep the project simple, there are no command abbreviations so you must type the entire keyword to process it. The editor is very simple; for instance, there is no save command back to a disk file


You can, however, process a series of commands from a "batch” command file. As part of this project, your instructor will provide a command file for you to test your software. If the program has any discrepancies, that should be detected in the output. Thus, for Canvas, please submit your Jupyter file. This an individual project, so please don't share your code or your work..

Line numbers

Each line in the document has an implicit line number.

●The first line is line number is 1; the next one is 2. Line numbers are incremented by 1 sequentially to the end of the document

●Line numbers are not permanently attached to their line content. The line number for a line can move up or down as you dynamically insert or delete lines from the user data

●When you first start the program, there are no lines. The first insert command creates an empty blank line at line 1. The first typeover command on line 1 enters content to that line

The Editor commands

These are the commands of the editor as shown through sample lines. If the command requires a line number, the sample line will be shown a line number along with other options  

1.insert 5 - inserts an empty blank line at at line position 5; old #5 becomes new #6, old #6 becomes new #7, and so forth to the end of the document. If line #4 does not yet exist, the new line is created with the first available line number beyond the end-of-document. For instance, If the document is empty, the line is created at #1 regardless of the number requested in the command. The user can not get an error with this command


2.delete 5 - deletes line 5; old line #6 is promoted to become new #5, old #7 becomes new #6, and so forth. If line 5 doesn't exist, the command is ignored. No error messages are generated by this program. Again, any input errors are silently ignored


3.typeover 5 <line content> - the contents of line 5 is replaced by the content in <line content>.  If line 5 doesn't exist, the command is ignored. An empty blank line first must be created first before content can be typed into that line position

4.fix 5 '<old text>' '<new text>' - changes line 5 by replacing the <old text> with the <new text>. It updates all occurrences in the line. The delimiter is a single quote. Nothing happens if <old text> is not found


5.printall - prints the contents of your document as a series of lines from the beginning to the end of the document. The output is thus a sequence of lines with each line exhibiting this format <line #>: <line content>

6.replace '<old text>' '<new text>' - searches every line of the document and replaces any <old text> with <new text>. The delimiter is a single quote


7.copy 5 to 10 - copies line 5 to line position 10; old #10 becomes new #11, old #11 becomes new #12, etc… If there is no line 5, the command is silently ignored. If the document doesn't reach line 10, the new line is placed at the end of the document at the next available number


8.execute <filename> - executes a test script of editor commands from the indicated file. Control returns to the console when the file ends. To keep things simple, the execute command can not be issued from inside a batch script; if issued, it is silently ignored like other user input error


An end-of-input from the file will return control back to the user in interactive mode. An end-of-input (a single carriage return by itself) in interactive mode will end the program


9.# <comment> - allows a comment line in the script file. The documentation information is ignored by the editor. It's primary purpose is to document the instructor's test script file so you can see any comments or instructions


10.dropmeta - If there are lines of user data that begins with “## “ starting in the first column, this command will delete that line from his data. This is a shortcut way to delete all user data that is not pertinent to the contents. It is a single command that rids all extraneous metadata that was inserted by copyright editors throughout the file


11.makenarrow - this command takes long lines of user text and chops them down to successive multiple lines that are 75 characters long with a dangling partial last line. To keep this simple, these shortened lines can be broken in the middle of the word to reach 75 characters exactly.  

Documenting your Program Statistics

Please track your program stats. Enter the following exact comment block of your statistics at the beginning of your program. This provides me an overview when I look at your program. My number counts are below and are probably typical (but not especially good or bad example of FP) - your mileage will vary, and that's OK


You don’t need to over-engineer this project.  I’ll just be looking at how well you do Functional Programming so you don’t have to worry about doing things like error checking, “try..catch” blocks, etc.. which we really didn’t cover in class

Instructor’s Program Statistics

●# of map functions2

●# of reduce functions1

●# of filter functions1

●# of lambda functions2

●# of recursive function calls2

●Total # of functions13

●# of global variables 0

●# of local variables 2

●# of mutable variables0

●Total # of variables2

●# of loops (for, while, etc..)0

●# of Python lines of code106

(not counting comment and blank lines)

Input Scripts, Testing and Evaluation

A sample set of input and output files is (or will be) provided. The input file will be a sample batch of editor commands; when executed the generated output should look like the matching sample output file. The two files give you an idea how your editor is working. From the console, you enter the execute command to invoke the test script. When embedded in the script are several printall to display the execution results. You can double-check your results with the sample output file. Feel free to add or change the input file


Evaluation: when I run your code, I will enter some arbitrary online commands to see that it responds to the console. Then I will run a second, somewhat larger, test script and compare those with known results  


Finally, the work wasn’t hard, but it took me a while to get started. I thought it was fun and stretched my imagination with Functional Programming. Frankly, it took me a while to get going. So, please don't wait until the last minute before starting or you’ll have difficulty in finishing. The due date is May 6th


版权所有:留学生程序网 2020 All Rights Reserved 联系方式:QQ:99515681 电子信箱:99515681@qq.com
免责声明:本站部分内容从网络整理而来,只供参考!如有版权问题可联系本站删除。