|
|
|
Haskell Проверка на заглавную букву.
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Только вот вчера начали в университете проходить Хаскель. Одно из заданий заключается в проверке двух слов , а именно имени и фамилии на заглавные буквы. Т.е. если введены имя и фамилия с заглавной буквы, то программу выдают 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2010, 00:20 |
|
||
|
Haskell Проверка на заглавную букву.
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2010, 01:04 |
|
||
|
Haskell Проверка на заглавную букву.
|
|||
|---|---|---|---|
|
#18+
замечание выражение типа x:xs - используется для разделения списка на голову и хвост, поэтому запись вида Код: plaintext 1. Код: plaintext 1. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2010, 01:08 |
|
||
|
Haskell Проверка на заглавную букву.
|
|||
|---|---|---|---|
|
#18+
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 И спасибо за скорый ответ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2010, 01:27 |
|
||
|
Haskell Проверка на заглавную букву.
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2010, 01:45 |
|
||
|
Haskell Проверка на заглавную букву.
|
|||
|---|---|---|---|
|
#18+
katerinka1989 if isUpper x && (isLower xs) then True else if isLower x && isUpper xs then False еще одно замечание по поводу этого кода. не пользуйся оператором if, если результат имеет булев тип. запись Код: plaintext 1. Код: plaintext 1. З.Ы. в каком универе учишься, далеко не везде хаскелл преподают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2010, 01:53 |
|
||
|
Haskell Проверка на заглавную букву.
|
|||
|---|---|---|---|
|
#18+
авторчем тебе мой пример не понравился? Мне он очень даже и понравился. Я поэтому его отсюда авторбессмысленна, нужно переписать так 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 Я в Берлине учусь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2010, 02:54 |
|
||
|
Haskell Проверка на заглавную букву.
|
|||
|---|---|---|---|
|
#18+
Во-первых, в первом клозе нужна правая часть. Во-вторых, второй клоз короче всего переписать так, как в первом посте ZyK_BotaN. В вашем же коде неверный синтаксис case (там используются не логические условия, а образцы, в этой задаче case не нужен), неверные типы: из функции логично возвращать Bool, а никак не Char; putStrLn же вообще имеет тип String -> IO (), а IO здесь совершенно незачем. Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2010, 07:21 |
|
||
|
Haskell Проверка на заглавную букву.
|
|||
|---|---|---|---|
|
#18+
katerinka1989 Я поэтому его отсюда авторбессмысленна, нужно переписать так isName (x:xs) if isUpper x && (isLower xs) и скопировала и вставила в свой код. или так нельзя делать?)) ты пропустила ф-ю all . запись isLower xs - не корректна, xs - не символ а строка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2010, 10:41 |
|
||
|
Haskell Проверка на заглавную букву.
|
|||
|---|---|---|---|
|
#18+
katerinka1989хорошо, тогда это мой новый код, который должен работать,да? но он не рабоатет так как cond is not in scope. import Char isName xs cond isUpper (head xs && isLower (tail(xs))) и как можно тогда ещё этот исправить? нет такой ф-и cond, я же написал, подставь вместо cond - условие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2010, 10:43 |
|
||
|
Haskell Проверка на заглавную букву.
|
|||
|---|---|---|---|
|
#18+
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)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2010, 11:22 |
|
||
|
Haskell Проверка на заглавную букву.
|
|||
|---|---|---|---|
|
#18+
Какой ещё Double?? Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2010, 11:38 |
|
||
|
Haskell Проверка на заглавную букву.
|
|||
|---|---|---|---|
|
#18+
katerinka1989ZyK_BotaN, я не пропускала all я взяла коды отсюда, а не код с all без all работать не будет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2010, 12:12 |
|
||
|
Haskell Проверка на заглавную букву.
|
|||
|---|---|---|---|
|
#18+
Спасибо за объяснения. Тогда получается всё так 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 но оно всё равно не работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2010, 21:27 |
|
||
|
Haskell Проверка на заглавную букву.
|
|||
|---|---|---|---|
|
#18+
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 но оно всё равно не работает. на каком тестовом примере ошибка? у меня вроде ваш код работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2010, 23:18 |
|
||
|
Haskell Проверка на заглавную букву.
|
|||
|---|---|---|---|
|
#18+
<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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2010, 23:54 |
|
||
|
Haskell Проверка на заглавную букву.
|
|||
|---|---|---|---|
|
#18+
katerinka1989, вы передаете ф-и только одну строку, а надо две. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2010, 23:59 |
|
||
|
Haskell Проверка на заглавную букву.
|
|||
|---|---|---|---|
|
#18+
м... что? я передаю функции только одну строку, а надо две. isName :: String -> String -> Bool isName n1 n2 = isName1 n1 && isName1 n2 речь идёт об этой строчке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2010, 00:14 |
|
||
|
Haskell Проверка на заглавную букву.
|
|||
|---|---|---|---|
|
#18+
katerinka1989м... что? я передаю функции только одну строку, а надо две. isName :: String -> String -> Bool isName n1 n2 = isName1 n1 && isName1 n2 речь идёт об этой строчке? да, у ф-и isName - два аргумента ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2010, 00:16 |
|
||
|
Haskell Проверка на заглавную букву.
|
|||
|---|---|---|---|
|
#18+
а сколько мне их там тогда надо? у меня фамилия и имя это и есть два аргумента. или мне их надо разделить и сделать что-то вроде этого? isName n1 = isName1 n1 isName n2 = isName1 n2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2010, 00:29 |
|
||
|
Haskell Проверка на заглавную букву.
|
|||
|---|---|---|---|
|
#18+
katerinka1989а сколько мне их там тогда надо? у меня фамилия и имя это и есть два аргумента. или мне их надо разделить и сделать что-то вроде этого? isName n1 = isName1 n1 isName n2 = isName1 n2 в определении все нормально, проблема при вызове функции дайте скриншот интерпретатора ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2010, 00:41 |
|
||
|
Haskell Проверка на заглавную букву.
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2010, 00:50 |
|
||
|
Haskell Проверка на заглавную букву.
|
|||
|---|---|---|---|
|
#18+
katerinka1989, Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2010, 01:07 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=36976531&tid=1343304]: |
0ms |
get settings: |
8ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
74ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
75ms |
get tp. blocked users: |
2ms |
| others: | 218ms |
| total: | 420ms |

| 0 / 0 |
