Advertisement
Guest User

Untitled

a guest
Nov 13th, 2019
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.61 KB | None | 0 0
  1. #lang racket
  2.  
  3. #|
  4. SE3 Funktionale Programmierung
  5. WiSe 2014, Uni Hamburg
  6. Aufgabenblatt 03
  7. Eingereicht von
  8. Timon Back (3back)
  9. Fabian Behrendt (3behrend)
  10. Nicolai Stäger (3staeger)
  11.  
  12. Beispielaufrufe befinden sich immer am Ende der Aufgabe
  13. und können einfach auskommentiert werden.
  14. |#
  15.  
  16.  
  17.  
  18. ; ##############################################################################
  19. ; ## Aufgabe 1.1 ###############################################################
  20. ; ##############################################################################
  21.  
  22. (define BuchstabierTafel
  23. '(
  24. (#\A Alfa)
  25. (#\T Tango)
  26. (#\B Bravo)
  27. (#\U Uniform)
  28. (#\C Charlie)
  29. (#\V Viktor)
  30. (#\D Delta)
  31. (#\W Whiskey)
  32. (#\E Echo)
  33. (#\X X-ray)
  34. (#\F Foxtrott)
  35. (#\Y Yankee)
  36. (#\G Golf)
  37. (#\Z Zulu)
  38. (#\H Hotel)
  39. (0 Nadazero)
  40. (#\I India)
  41. (1 Unaone)
  42. (#\J Juliett)
  43. (2 Bissotwo)
  44. (#\K Kilo)
  45. (3 Terrathree)
  46. (#\L Lima)
  47. (4 Kartefour)
  48. (#\M Mike)
  49. (5 Pantafive)
  50. (#\N November)
  51. (6 Soxisix)
  52. (#\O Oscar)
  53. (7 Setteseven)
  54. (#\P Papa)
  55. (8 Oktoeight)
  56. (#\Q Quebec)
  57. (9 Novenine)
  58. (#\R Romeo)
  59. ("," Decimal)
  60. (#\S Sierra)
  61. ("." Stop)
  62. )
  63. )
  64. ; Diese Assoziativliste speichert zu jedem Buchstaben einen Schlüssel.
  65. ; Die Liste so anzulegen, hat den Vorteil, dass sie assoziativ ist
  66. ; (es kann mit assoc darauf zugegriffen werden).
  67. ; Dadurch kann mit einem Schlüssel auf den Wert zugeriffen werden (map).
  68.  
  69. ; ## Aufgabe 1.2 ###############################################################
  70. ; ##############################################################################
  71.  
  72. ; Gibt den Schlüssel zu einem Char aus 'BuchstabierTafel' zurück
  73. (define (Buchstabe->tafelwort Buchstabe)
  74. ( cadr
  75. (assoc Buchstabe BuchstabierTafel)
  76. )
  77. )
  78.  
  79. ;(Buchstabe->tafelwort #\B) ; -> '(Bravo)
  80. ;(Buchstabe->tafelwort 1) ; -> '(Unaone)
  81. ;(Buchstabe->tafelwort ".") ; -> '(Stop)
  82.  
  83.  
  84.  
  85. ; ##############################################################################
  86. ; ## Aufgabe 1.3 ###############################################################
  87. ; ##############################################################################
  88. (define (buchstabe->tafelwort buchstabe)
  89. ( Buchstabe->tafelwort ; Benutzt die vorhandene Funktion, allerdings eventuell mit anderen Parameter
  90. ( if
  91. (char? buchstabe)
  92. (
  93. ; Buchstabe ist ein Char (vielleicht ein kleiner Buchstabe?)
  94. if (char-lower-case? buchstabe)
  95. ; b ist klein geschrieben.
  96. ; Dann b zu einem Großbuchstaben machen.
  97. ; Kann dann an die Buchstabe->tafelwort übergeben werden
  98. (char-upcase buchstabe)
  99. ; b ist bereits groß geschrieben. Parameter kann einfach weiter gereicht werden
  100. buchstabe
  101. )
  102. ; Buchstabe ist kein Char (also eine Zahl oder . ,). Parameter kann einfach weiter gereicht werden.
  103. buchstabe
  104. )
  105. )
  106. )
  107.  
  108. ;(buchstabe->tafelwort #\B) ; -> '(Bravo)
  109. ;(buchstabe->tafelwort #\b) ; -> '(Bravo)
  110. ;(buchstabe->tafelwort 1) ; -> '(Unaone)
  111. ;(buchstabe->tafelwort ".") ; -> '(Stop)
  112.  
  113.  
  114.  
  115. ; ##############################################################################
  116. ; ## Aufgabe 1.4 ###############################################################
  117. ; ##############################################################################
  118.  
  119. ; Wandelt eine Liste von Chars in die dazugehörigen Buchstabentafel-Liste (rekursive Funktion)
  120. (define (charlist->tafelwort charlist) ; charList = Die List der Buchstaben (char) die umgewandelt werden sollen.
  121. (
  122. if (empty? charlist)
  123. ; Es gibt keine weiteren Buchstaben, also eine leere Liste zurückgeben
  124. '()
  125. ; Sonst:
  126. (
  127. ; Eine Liste erstellen aus:
  128. cons
  129. ; Dem aktuellen Buchstaben, welcher in das tafelwort 'übersetzt' werden muss
  130. (buchstabe->tafelwort
  131. ; unter Berücksichtigung des Parameters, welcher der erste Eintrag in der Liste ist.
  132. (car charlist)
  133. )
  134. ; Zweites Element der neuen Liste ist der rekursive Aufruf mit dem Rest der Liste
  135. (charlist->tafelwort (cdr charlist))
  136. )
  137. )
  138. )
  139.  
  140. ; Wandelt einen String in eine Liste von Chars
  141. (define (wort->tafelwort wort) ; wort = Ein String, der 'übersetzt' wird.
  142. (
  143. charlist->tafelwort (string->list wort)
  144. )
  145. )
  146.  
  147. ;(wort->tafelwort "Racket") ; '((Romeo) (Alfa) (Charlie) (Kilo) (Echo) (Tango))
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154. (require se3-bib/flaggen-module)
  155.  
  156. ; ##############################################################################
  157. ; ## Aufgabe 2.1 ###############################################################
  158. ; ##############################################################################
  159.  
  160. (define FlaggenTafel
  161. '(
  162. (#\A A)
  163. (#\B B)
  164. (#\C C)
  165. (#\D D)
  166. (#\E E)
  167. (#\F F)
  168. (#\G G)
  169. (#\H H)
  170. (#\I I)
  171. (#\J J)
  172. (#\K K)
  173. (#\L L)
  174. (#\M M)
  175. (#\N N)
  176. (#\O O)
  177. (#\P P)
  178. (#\Q Q)
  179. (#\R R)
  180. (#\S S)
  181. (#\T T)
  182. (#\U U)
  183. (#\V V)
  184. (#\W W)
  185. (#\X X)
  186. (#\Y Y)
  187. (#\Z Z)
  188. (0 Z0)
  189. (1 Z1)
  190. (2 Z2)
  191. (3 Z3)
  192. (4 Z4)
  193. (5 Z5)
  194. (6 Z6)
  195. (7 Z7)
  196. (8 Z8)
  197. (9 Z9)
  198. )
  199. )
  200. ; Diese Assoziativliste speichert zu jedem Buchstaben einen Schlüssel.
  201. ; Die Liste so anzulegen, hat den Vorteil, dass sie assoziativ ist
  202. ; (es kann mit assoc darauf zugegriffen werden).
  203. ; Dadurch kann mit einem Schlüssel auf den Wert zugeriffen werden (map).
  204.  
  205.  
  206.  
  207. ; ##############################################################################
  208. ; ## Aufgabe 2.2 ###############################################################
  209. ; ##############################################################################
  210.  
  211. ; Gibt den Schlüssel zu einem Char aus FlaggenTafel zurück
  212. (define (Buchstabe->flagge Buchstabe)
  213. ( eval
  214. ( cadr
  215. ( assoc
  216. Buchstabe
  217. FlaggenTafel
  218. )
  219. )
  220. )
  221. )
  222.  
  223. ;(Buchstabe->flagge #\B) ; Funktioniert leider nur, wenn man es in der Konsole eingibt
  224.  
  225.  
  226.  
  227. ; ##############################################################################
  228. ; ## Aufgabe 2.3 ###############################################################
  229. ; ##############################################################################
  230.  
  231. ; Wandelt eine Liste von Chars in die dazugehörigen Buchstabentafel-Liste (rekursive Funktion)
  232. ; @param charList
  233. ; Die List der Buchstaben (char) die umgewandelt werden sollen.
  234. (define (charlist->flaggenwort charlist)
  235. ( if
  236. (empty? charlist)
  237. ; Es gibt keine weiteren Buchstaben, also eine leere Liste zurückgeben
  238. '()
  239. ; Sonst:
  240. ( ; Eine Liste erstellen aus:
  241. cons
  242. ; Dem aktuellen Buchstaben, welcher in das tafelwort 'übersetzt' werden muss
  243. ( Buchstabe->flagge
  244. ; unter Berücksichtigung des Parameters, welcher der erste Eintrag in der Liste ist.
  245. (car charlist)
  246. )
  247. ; Zweites Element der neuen Liste ist der rekursive Aufruf mit dem Rest der Liste
  248. ( charlist->flaggenwort (cdr charlist) )
  249. )
  250. )
  251. )
  252.  
  253. ; Wandelt einen String in eine Liste von Chars und gibt danach
  254. ; eine Liste der entsprechenden Flaggen zurück
  255. ; @param wort
  256. ; Ein String, der 'übersetzt' wird.
  257. (define (wort->flaggenwort wort)
  258. ( charlist->flaggenwort
  259. (string->list wort)
  260. )
  261. )
  262.  
  263. ;(wort->flaggenwort "RACKET") ; Funktioniert leider nur, wenn man es in der Konsole eingibt
  264.  
  265.  
  266. (T Tango)
  267. (U Uniform)
  268. (V Viktor)
  269. (W Whiskey)
  270. (X X-ray)
  271. (Y Yankee)
  272. (Z Zulu)
  273. (0 Nadazero)
  274. (1 Unaone)
  275. (2 Bissotwo)
  276. (3 Terrathree)
  277. (4 Kartefour)
  278. (5 Pantafive)
  279. (6 Soxisix)
  280. (7 Setteseven)
  281. (8 Oktoeight)
  282. (9 Novenine)
  283. (, Decimal)
  284. (. Stop)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement