powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Haskell Проверка на заглавную букву.
24 сообщений из 24, страница 1 из 1
Haskell Проверка на заглавную букву.
    #36975754
katerinka1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!
Только вот вчера начали в университете проходить Хаскель.

Одно из заданий заключается в проверке двух слов , а именно имени и фамилии на заглавные буквы.
Т.е. если введены имя и фамилия с заглавной буквы, то программу выдают True или выражение на подобе "Верно" =). Если имя и фамилия введены маленькими или большими буквами, то программы выдает или False или что-нить на подобе "Напишите имя и фамилию с заглавных букв"

Я что-то попыталась сделать уже. и у меня получилось пару вариантов. Пока что я остановилась только на одном из двух слов, т.е. написала вс только для ,например, имени, чтобы для начало было легче.

Я написала три варианта и для каждого хаскель выдёт мне ошибку. Подскажите где мы что надо исправить и вобще в правильном ли я направлении думаю?

Спасибо огромное!

Для моего первого варианта Хаскель говорит
Uebung5.hs:5:4: parse error on input `case'
import Char
isName :: String -> Char
isName []
isName p(x:xs)
case of
isUpper (head(x:xs)) && isLower (tail(x:xs)) -> putStrLn "You entered your name right"
isUpper (head(x:xs)) && isUpper (tail(x:xs)) -> putStrLn "Enter only the begining letter large"
isLower (head(x:xs)) && isUpper (tail(x:xs)) -> putStrLn "Enter only the begining letter large"
isLower (head(x:xs)) && isLower (tail(x:xs)) -> putStrLn
else if isLower (head(x:xs)) && isUpper (tail(x:xs)) )
then False


Для второго выдаёт:
Uebung5.hs:5:4: parse error on input `if'

import Char
isName :: String -> Bool -> Bool
isName []
isName (x:xs)
if isUpper (head(x:xs)) && isLower (tail(x:xs))
then True
else if isLower (head(x:xs)) && isUpper (tail(x:xs)) )
then False




Для 3его выдаёт вот это:
Uebung5.hs:4:0:
The type signature for `isName' lacks an accompanying binding


import Char
isName :: String -> Bool -> Bool
isName []
isName p(x:xs)
|isUpper px = x : isName isLower p xs
|otherwise = False
...
Рейтинг: 0 / 0
Haskell Проверка на заглавную букву.
    #36975773
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
import Char
isName (n:ns) = isUpper n && (all isLower ns)
для проверки одного имени.
...
Рейтинг: 0 / 0
Haskell Проверка на заглавную букву.
    #36975775
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
замечание

выражение типа
x:xs - используется для разделения списка на голову и хвост, поэтому запись вида
Код: plaintext
1.
isName (x:xs)
if isUpper (head(x:xs)) && isLower (tail(x:xs)) 
бессмысленна, нужно переписать так
Код: plaintext
1.
isName (x:xs)
if isUpper x && (isLower xs) 
или
Код: plaintext
1.
isName xs
if isUpper (head xs && isLower (tail(xs) 
...
Рейтинг: 0 / 0
Haskell Проверка на заглавную букву.
    #36975781
katerinka1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaN,

Он у меня всё равно выдаёт ошибку, связанную c if
Я понять не могу почему

import Char
isName1 (x:xs)=do
if isUpper x && (isLower xs)
then True
else if isLower x && isUpper xs
then False


И спасибо за скорый ответ
...
Рейтинг: 0 / 0
Haskell Проверка на заглавную букву.
    #36975784
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
katerinka1989ZyK_BotaN,

Он у меня всё равно выдаёт ошибку, связанную c if
Я понять не могу почему

import Char
isName1 (x:xs)=do
if isUpper x && (isLower xs)
then True
else if isLower x && isUpper xs
then False


И спасибо за скорый ответ
isLower xs - неправильное вырожение.
isLower проверяет символ, а xs - строка.
чем тебе мой пример не понравился?
чтобы проверить строку используй ф-и all
...
Рейтинг: 0 / 0
Haskell Проверка на заглавную букву.
    #36975789
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
katerinka1989 if isUpper x && (isLower xs)
then True
else if isLower x && isUpper xs
then False

еще одно замечание по поводу этого кода.

не пользуйся оператором if, если результат имеет булев тип.

запись

Код: plaintext
1.
if cond then True else False
эквивалентна записи
Код: plaintext
1.
cond
, где cond - условие.

З.Ы. в каком универе учишься, далеко не везде хаскелл преподают.
...
Рейтинг: 0 / 0
Haskell Проверка на заглавную букву.
    #36975810
katerinka1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторчем тебе мой пример не понравился?
Мне он очень даже и понравился. Я поэтому его
отсюда

авторбессмысленна, нужно переписать так
isName (x:xs)
if isUpper x && (isLower xs)

и скопировала и вставила в свой код. или так нельзя делать?))

автореще одно замечание по поводу этого кода.
не пользуйся оператором if, если результат имеет булев тип.
запись
if cond then True else False
эквивалентна записи
cond
, где cond - условие.


хорошо, тогда это мой новый код, который должен работать,да? но он не рабоатет так как cond is not in scope.

import Char
isName xs
cond isUpper (head xs && isLower (tail(xs)))


и как можно тогда ещё этот исправить?

import Char
isName :: String -> Char
isName []
isName (x:xs)
case (x:xs) of
isUpper x && isLower xs -> putStrLn "You entered your name right"
isUpper x && isUpper xs -> putStrLn "Enter only the begining letter large"
isLower x && isUpper xs -> putStrLn "Enter only the begining letter large"
isLower x && isLower xs -> putStrLn "First letters must be large!"
else if isLower x:xs && isUpper xs
then False

Я в Берлине учусь.
...
Рейтинг: 0 / 0
Haskell Проверка на заглавную букву.
    #36975865
tempestadept
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Во-первых, в первом клозе нужна правая часть.
Во-вторых, второй клоз короче всего переписать так, как в первом посте ZyK_BotaN.
В вашем же коде неверный синтаксис case (там используются не логические условия, а образцы, в этой задаче case не нужен), неверные типы: из функции логично возвращать Bool, а никак не Char; putStrLn же вообще имеет тип String -> IO (), а IO здесь совершенно незачем.
Код: plaintext
1.
2.
3.
import Data.Char
isName :: String -> Bool
isName [] = False
isName (x:xs) = isUpper x && all isLower xs
...
Рейтинг: 0 / 0
Haskell Проверка на заглавную букву.
    #36976222
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
katerinka1989 Я поэтому его
отсюда

авторбессмысленна, нужно переписать так
isName (x:xs)
if isUpper x && (isLower xs)

и скопировала и вставила в свой код. или так нельзя делать?))


ты пропустила ф-ю all .
запись isLower xs - не корректна, xs - не символ а строка.
...
Рейтинг: 0 / 0
Haskell Проверка на заглавную букву.
    #36976231
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
katerinka1989хорошо, тогда это мой новый код, который должен работать,да? но он не рабоатет так как cond is not in scope.

import Char
isName xs
cond isUpper (head xs && isLower (tail(xs)))


и как можно тогда ещё этот исправить?

нет такой ф-и cond, я же написал, подставь вместо cond - условие.
...
Рейтинг: 0 / 0
Haskell Проверка на заглавную букву.
    #36976349
katerinka1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaN,
я не пропускала all

авторбессмысленна, нужно переписать так
isName (x:xs)
if isUpper x && (isLower xs)
или
isName xs
if isUpper (head xs && isLower (tail(xs)

я взяла коды отсюда, а не код с all
и я не понимаю расставление скобок во втором.
должно это так выглядеть?

isName xs isUpper (head (xs)) && isLower (tail (xs))

или так?
isName xs isUpper (head xs) && isLower (tail xs)


хорошо. для одного имени я поняла. для двух слов аналогично получается?

как например
isName :: Double ->Double -> Bool
isName xs ys
isName [] = False
isName xs ys isUpper (head (xs)) && all isLower (tail (xs)) && isUpper (head (ys)) && all isLower (tail (ys))
...
Рейтинг: 0 / 0
Haskell Проверка на заглавную букву.
    #36976411
tempestadept
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Какой ещё Double??
Код: plaintext
1.
bothNames :: String -> String -> Bool
bothNames s1 s2 = isName s1 && isName s2
...
Рейтинг: 0 / 0
Haskell Проверка на заглавную букву.
    #36976531
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
katerinka1989ZyK_BotaN,
я не пропускала all


я взяла коды отсюда, а не код с all
без all работать не будет
...
Рейтинг: 0 / 0
Haskell Проверка на заглавную букву.
    #36977931
katerinka1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за объяснения.

Тогда получается всё так

import Data.Char

isName :: String -> String -> Bool
isName n1 n2 = isName1 n1 && isName1 n2

isName1 :: String -> Bool
isName1 [] = False
isName1 (x:xs) = isUpper x && all isLower xs

но оно всё равно не работает.
...
Рейтинг: 0 / 0
Haskell Проверка на заглавную букву.
    #36978008
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
katerinka1989Спасибо за объяснения.

Тогда получается всё так

import Data.Char

isName :: String -> String -> Bool
isName n1 n2 = isName1 n1 && isName1 n2

isName1 :: String -> Bool
isName1 [] = False
isName1 (x:xs) = isUpper x && all isLower xs

но оно всё равно не работает.

на каком тестовом примере ошибка?
у меня вроде ваш код работает.
...
Рейтинг: 0 / 0
Haskell Проверка на заглавную букву.
    #36978026
katerinka1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
<interactive>:1:0:
No instance for (Show (String -> Bool))
arising from a use of `print' at <interactive>:1:0-15
Possible fix:
add an instance declaration for (Show (String -> Bool))
In a stmt of an interactive GHCi command: print it
...
Рейтинг: 0 / 0
Haskell Проверка на заглавную букву.
    #36978031
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
katerinka1989,

вы передаете ф-и только одну строку, а надо две.
...
Рейтинг: 0 / 0
Haskell Проверка на заглавную букву.
    #36978045
katerinka1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
м... что?

я передаю функции только одну строку, а надо две.

isName :: String -> String -> Bool
isName n1 n2 = isName1 n1 && isName1 n2

речь идёт об этой строчке?
...
Рейтинг: 0 / 0
Haskell Проверка на заглавную букву.
    #36978046
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
katerinka1989м... что?

я передаю функции только одну строку, а надо две.

isName :: String -> String -> Bool
isName n1 n2 = isName1 n1 && isName1 n2

речь идёт об этой строчке?

да, у ф-и isName - два аргумента
...
Рейтинг: 0 / 0
Haskell Проверка на заглавную букву.
    #36978052
katerinka1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а сколько мне их там тогда надо? у меня фамилия и имя это и есть два аргумента.
или мне их надо разделить и сделать что-то вроде этого?

isName n1 = isName1 n1
isName n2 = isName1 n2
...
Рейтинг: 0 / 0
Haskell Проверка на заглавную букву.
    #36978061
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
katerinka1989а сколько мне их там тогда надо? у меня фамилия и имя это и есть два аргумента.
или мне их надо разделить и сделать что-то вроде этого?

isName n1 = isName1 n1
isName n2 = isName1 n2

в определении все нормально, проблема при вызове функции
дайте скриншот интерпретатора
...
Рейтинг: 0 / 0
Haskell Проверка на заглавную букву.
    #36978066
katerinka1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Haskell Проверка на заглавную букву.
    #36978075
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
katerinka1989,

Код: plaintext
isName "Kataj" "Kk"
...
Рейтинг: 0 / 0
Haskell Проверка на заглавную букву.
    #36978076
katerinka1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
м. да. это было глупо
спасибо большое))))
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Haskell Проверка на заглавную букву.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]