Skip to the content.

Je gaat zelf een recursieve functie pow maken. Deze functie pow heeft als invoer twee getallen g en m en geeft als uitvoer gm (`g tot de macht m`). Je gebruikt de functie pow later om functies te bereken van de vorm y = ax2 + bx + c. Daarom is de functie pow goed genoeg als je voor m alleen gehele positieve getallen mag gebruiken. De functie pow heeft als uitkomst een getal dat gm weergeeft.

Run het elm programma mypow.elm in de volgende cell. Elm geeft als foutmelding dat de functie pow ontbreekt. Dat klopt want dat is nu juist de functie die jij zelf moet schrijven.

Voeg de functie pow toe na --insert your code here volgens de volgende omschijving. Pow heeft als invoer twee getallen g en m. Daarvan is g het grondtal en m de macht. Pow geeft als resultaat gm terug.

Gebruik daarbij recursie volgens dit schema:

elmex2.2.png

import Html exposing (text, div, input, Attribute)
import Html exposing (beginnerProgram)
import Html.Events exposing (on, keyCode, onInput)
import Json.Decode as Json
import String exposing(..)
import List exposing(..)
import Maybe exposing(..)

checkedStringToFloat : String -> Float
checkedStringToFloat s =
    Result.withDefault 0 (String.toFloat s)

listStringToListFloat : List String -> List Float
listStringToListFloat ls =
    List.map checkedStringToFloat ls

powTest : String -> String
powTest s =
  let
    lf = listStringToListFloat (split "," s)
    g =
      withDefault 0 (head lf)
    m =
      withDefault 0 (head (withDefault [] (tail lf)))
  in
    toString (pow g m)

main =
  beginnerProgram
  { model =
    { outputData = ""
    , inputData = ""
    }
  , view = view
  , update = update
  }


view model =
  div []
  [ input [onKeyDown KeyDown, onInput Input] []
  , div [] [ text ("Result: " ++ model.outputData) ]
  ]

onKeyDown : (Int -> msg) -> Html.Attribute msg
onKeyDown tagger =
  on "keydown" (Json.map tagger keyCode)

type Msg
  = NoOp
  | KeyDown Int
  | Input String

update msg model =
  case msg of

    NoOp ->
      model

    KeyDown key ->
      if key == 13 then
        { model | outputData = powTest model.inputData }
      else
        model

    Input text ->
      { model | inputData = text }

-- insert your code here
pow : Float -> Int -> Float
-- compile-code