Voor een schoolopdracht wordt ik geacht erachter te komen wat de volgende functie doet:
In bovenstaande functie zijn:
• _: een variabele, waarvan de waarde ons niet interesseert
• LT, GT en EQ: lower than, greater than en equal
• compare: vergelijkt 2 waarden
Ikzelf heb nog nooit Haskell gehad en na anderhalf uur puzzelen heb ik besloten het hier neer te leggen. Zelf ben ik alleen bedreven met OO talen, dus misschien is mijn hele denkwijze wel fout.
Mijn begrjiping hiervan:
Op de eerste regel wordt functie sbt aangeroepen met als parameters _ en NullNode. Nullnode heeft als waarde null.
Vanaf regel twee begint de functie sbt. sbt neemt twee parameters eentje ongedefinieerd genaamd key en een node. Deze node is kennelijk een soort object en bevat een nodekey, een nodevalue, een rightChild en een leftChild. Vervolgens wordt er een vergelijking uitgevoerd tussen de key en de node (dat kan kennelijk). If key < node gebruik leftChild om hetzelfde nog eens te doen, if key > node gebruik rightChild om nog eens hetzelfde te doen en anders return nodevalue.
Klopt dit ook maar enigszinds met wat hier staat?
code:
1
2
3
4
5
6
| sbt _ NullNode = Nothing sbt key (Node nodeKey nodeValue (leftChild, rightChild)) = case compare key nodeKey of LT -> sbt key leftChild GT -> sbt key rightChild EQ -> Just nodeValue |
In bovenstaande functie zijn:
• _: een variabele, waarvan de waarde ons niet interesseert
• LT, GT en EQ: lower than, greater than en equal
• compare: vergelijkt 2 waarden
Ikzelf heb nog nooit Haskell gehad en na anderhalf uur puzzelen heb ik besloten het hier neer te leggen. Zelf ben ik alleen bedreven met OO talen, dus misschien is mijn hele denkwijze wel fout.
Mijn begrjiping hiervan:
Op de eerste regel wordt functie sbt aangeroepen met als parameters _ en NullNode. Nullnode heeft als waarde null.
Vanaf regel twee begint de functie sbt. sbt neemt twee parameters eentje ongedefinieerd genaamd key en een node. Deze node is kennelijk een soort object en bevat een nodekey, een nodevalue, een rightChild en een leftChild. Vervolgens wordt er een vergelijking uitgevoerd tussen de key en de node (dat kan kennelijk). If key < node gebruik leftChild om hetzelfde nog eens te doen, if key > node gebruik rightChild om nog eens hetzelfde te doen en anders return nodevalue.
Klopt dit ook maar enigszinds met wat hier staat?