«Я застрял при анализе определения функции:»: как правильно определить функцию Вяза? - PullRequest
1 голос
/ 19 марта 2020

Я впервые экспериментирую / практикую Вяза и сталкиваюсь с трудностями при определении функции. Следующее:

isDivisible : Int -> Int -> Int -> Bool
isDivisible n x y =
  ((modBy n x) == 0) && ((modBy n y) == 0)

isDivisible 4 4 2

Результат:

-- PROBLEM IN DEFINITION --------------------------------------- Jump To Problem

I got stuck while parsing the `isDivisible` definition:

5| isDivisible 4 4 2
                    ^
I am not sure what is going wrong exactly, so here is a valid definition (with
an optional type annotation) for reference:

    greet : String -> String
    greet name =
      "Hello " ++ name ++ "!"

Try to use that format!

Интерпретатор Elm, используемый CodeWars, пропускает это; это просто говорит о том, что для некоторых входов вывод неправильный (например, 4 4 2). Нет результатов Google для "I got stuck while parsing the * definition:" (хотя парсер с открытым исходным кодом, go рисунок). Это мой первый раз на функциональном языке. Что не так?

1 Ответ

4 голосов
/ 19 марта 2020

Я не уверен, почему ваша функция isDivisible принимает три числа, но синтаксическая ошибка, которую вы видите, относится не к ее определению, а к вашему вызову:

isDivisible 4 4 2

В Elm, все ваши выражения (как и выше) должны жить в функциях. Вы не можете просто написать их на верхнем уровне вашего файла. Их нужно использовать в контексте, где Elm знает, что с ними делать.

Программы Elm начинают выполняться из функции main. Функция main может возвращать разные вещи в зависимости от того, что вы хотите сделать, но простейший вариант использования - это вернуть некоторое HTML.

module Main exposing (main)

import Html exposing (text)


main =
    text "Hello World"

Выполнить в ell ie

Если вы скомпилируете и откроете его в своем браузере, вы увидите текст «Hello World» на экране , Обратите внимание, что мы поместили наш код под функцию main вместо того, чтобы записывать их непосредственно в файл.

Имея это в виду, вы можете сделать что-то вроде следующего, чтобы показать вывод вашего вызова:

main =
    if isDivisible 4 4 2 then
        text "It is divisible"

    else
        text "It is NOT divisible"

Выполнить в ell ie

Если вы просто хотите вместо этого увидеть вывод вашего вызова в консоли, вы можете использовать функцию Debug.log , например:

main =
    let
        _ =
            Debug.log "Is divisible?" (isDivisible 4 4 2)
    in
    text "Hello World"

Выполнить в Ell ie (см. ЛОГИ)

...