Skip to content
Snippets Groups Projects
Commit 53ad85a2 authored by Lucas's avatar Lucas
Browse files

Added U7

parent d7633b5f
No related branches found
No related tags found
1 merge request!2Added all Exercises
......@@ -18,13 +18,13 @@
<a @click="setSite(4)">Javascript.</a>
</div>
<div class="menu-item menu-text">
Übung 5
<a @click="setSite(5)">DOM</a>
</div>
<div class="menu-item menu-text">
Übung 6
<a @click="setSite(6)">ECMAScript</a>
</div>
<div class="menu-item menu-text">
Übung 7
<a @click="setSite(7)">Functional</a>
</div>
<div class="menu-item menu-text">
Übung 8
......@@ -59,6 +59,7 @@ const U3 = () => import("@/components/U3");
const U4 = () => import("@/components/U4");
const U5 = () => import("@/components/U5");
const U6 = () => import("@/components/U6");
const U7 = () => import("@/components/U7");
var loadedSite;
......@@ -67,7 +68,7 @@ export default {
name: 'Home',
// eslint-disable-next-line vue/no-unused-components
components: {
U1,U2,U3,U4,U5,U6
U1,U2,U3,U4,U5,U6,U7
},
comments:{
U1
......@@ -91,6 +92,8 @@ export default {
return U5;
case 6:
return U6;
case 7:
return U7;
default:
return U1;
}
......@@ -118,6 +121,9 @@ export default {
case 6:
loadedSite = 6;
break;
case 7:
loadedSite = 7;
break;
default:
loadedSite = 1
break;
......
<template>
<div class="exercise">
<!--Exercise 1-------------------------------------------------------------------------------------->
<div class="exercise-title">
<h2>Funktionale Programmierung</h2>
<p>JavaScript in der Tradition der funktionalen Programmiersprachen LISP und Scheme</p>
<hr>
</div>
<div class="exercise-item">
<div class="exercise-description">
<h3>Funktionen in JavaScript</h3>
<hr>
</div>
<div class="question">
Schreiben Sie eine Funktion <bold>identity_function()</bold>, die ein Argument als Parameter entgegennimmt und eine Funktion zurückgibt, die dieses Argument zurückgibt.
</div>
<div class="solution">
function identify_function(arg){ <br>
return function(){return arg;}; <br>
}
</div>
<hr>
<div class="question">
Schreiben Sie eine Addier-Funktion addf(), so dass addf(x)(y) genau x + y zurück gibt.
</div>
<div class="solution">
function addf(x){<br>
return function(y){return x +y;};<br>
}
</div>
<hr>
<div class="question">
Schreiben Sie eine Funktion applyf(), die aus einer binären Funktion wie add(x,y) eine Funktion addfberechnet, die mit zwei Aufrufen das gleiche Ergebnis liefert, z.B. addf = applyf(add); addf(x)(y) soll add(x,y) liefern.
</div>
<div class="solution">
function applyf(fun){<br>
return function(x){<br>
return function(y){<br>
return fun(x,y);<br>
}<br>
}<br>
}
</div>
<hr>
<div class="question">
Schreiben Sie eine Funktion curry() (von Currying), die eine binäre Funktion und ein Argument nimmt, um daraus eine Funktion zu erzeugen, die ein zweites Argument entgegen nimmt.
</div>
<div class="solution">
function curry(fun,x){ <br>
return function(y){ <br>
return fun(x,y); <br>
} <br>
}
</div>
<hr>
<div class="question">
Erzeugen Sie die inc-Funktion mit Hilfe einer der Funktionen addf, applyf und curry aus den letzten Aufgaben, ohne die Funktion inc() selbst zu implementieren.
</div>
<div class="solution">
function inc(x){ <br>
return curry((a,b) => a +b,x)(1); <br>
}
</div>
<hr>
<div class="question">
Schreiben Sie eine Funktion methodize(), die eine binäre Funktion (z.B. add, mul) in eine unäre Methode verwandelt.
</div>
<div class="solution">
function methodize(fun){ <br>
return function(x){ <br>
return fun(this,x); <br>
} <br>
}
</div>
<hr>
<div class="question">
Schreiben Sie eine Funktion demethodize(), die eine unäre Methode (z.B. add, mul) in eine binäre Funktion umwandelt.
</div>
<div class="solution">
function demethodize(fun){ <br>
return function(x,y){ <br>
return fun.bind(x)(y); <br>
}<br>
}
</div>
<hr>
<div class="question">
Schreiben Sie eine Funktion twice(), die eine binäre Funktion in eine unäre Funktion umwandelt, die den einen Parameter zweimal weiter reicht.
</div>
<div class="solution">
function twice(fun){ <br>
return function(x){ <br>
return fun(x,x); <br>
}<br>
}
</div>
<hr>
<div class="question">
Schreiben Sie eine Funktion composeu(), die zwei unäre Funktionen in eine einzelne unäre Funktion transformiert, die beide nacheinander aufruft, z.B. soll composeu(double, square)(3) genau 36 ergeben.
</div>
<div class="solution">
function composeu(fun1,fun2){ <br>
return function(x){ <br>
return fun2(fun1(x)); <br>
} <br>
}
</div>
<hr>
<div class="question">
Schreiben Sie eine Funktion composeb(), die zwei binäre Funktionen in eine einzelne Funktion transformiert, die beide nacheinander aufruft.
</div>
<div class="solution">
function composeb(fun1,fun2){ <br>
return function(x,y,z){ <br>
return fun2(fun1(x,y),z);<br>
}<br>
}
</div>
<hr>
<div class="question">
Schreiben Sie eine Funktion once(), die einer anderen Funktion nur einmal erlaubt, aufgerufen zu werden
</div>
<div class="solution">
function once(fun){ <br>
let i = 0; <br>
if(i <= 0){<br>
++i;<br>
return function(x,y){<br>
return fun(x,y);<br>
}<br>
}<br>
console.error("Only call once!");<br>
return undefined;<br>
}<br>
</div>
<hr>
<div class="question">
Schreiben Sie eine Fabrik-Funktion counterf(), die zwei Funktionen inc() und dec() berechnet, die einen Zähler hoch- und herunterzählen.
</div>
<div class="solution">
function counterf(count){ <br>
return{ <br>
count: count, <br>
inc: () => ++count, <br>
dec: () => --count <br>
} <br>
}
</div>
<hr>
<div class="question">
Schreiben Sie eine rücknehmbare Funktion revocable(), die als Parameter eine Funktion nimmt und diese bei Aufruf ausführt.
</div>
<div class="solution">
function revocable(fun){ <br>
let i = 0; <br>
return{ <br>
invoke: (x) => {if(i < 1)fun(x); else console.error("Something went wrong");}, <br>
revoke:() => ++i <br>
} <br>
}
</div>
<hr>
<div class="question">
Implementieren Sie ein "Array Wrapper"-Objekt mit den Methoden get, store und append, so dass ein Angreifer keinen Zugriff auf das innere, private Array hat.
</div>
<div class="solution">
function vector(){ <br>
let array = []; <br>
return{ <br>
get: (i) => array[i], <br>
store: function(i,v){ <br>
array[i] = v; <br>
}, <br>
append: function(a){ <br>
array.push(a); <br>
} <br>
}; <br>
}
</div>
</div>
<!--Exercise 2-------------------------------------------------------------------------------------------------------------------->
<div class="exercise-item">
<div class="exercise-description">
<h3>Textanalyse mit filter-map-reduce</h3>
<hr>
</div>
<div class="question">
Schreiben Sie in JavaScript eine Textanalyse.
</div>
<div class="solution">
function parse(){ <br>
var wordCounts = { }; <br>
var words = str.split(/\b/); <br>
for(var i = 0; i < words.length; i++) <br>
wordCounts["_" + words[i]] = (wordCounts["_" + words[i]] || 0) + 1; <br>
}
</div>
</div>
</div>
</template>
<script>
export default {
name: "U7"
}
</script>
<style>
@import "exercisestyle.css";
</style>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment