Вы можете найти SML-трек Exercism приятным тогда. Есть даже Pig Latin упражнение. : -)
Довольно часто взрывать, анализировать и взрывать, но это не очень эффективно, а в некоторых случаях и не легче. Как указало molbdnilo, isVowel
, вероятно, должно принять char
в качестве ввода вместо char list
:
fun isVowel c =
c = #"a" orelse
c = #"e" orelse
c = #"i" orelse
c = #"o" orelse
c = #"u"
Для функции, которая преобразует слово в латинский, вы можете сделать это полностью с помощью строковых функций:
fun piglatin (word : string) =
let val firstLetter = String.sub (word, 0)
in if isVowel firstLetter
then word ^ "yay"
else String.extract (word, 1, NONE) ^ str firstLetter ^ "ay"
end
Проверка этого:
- piglatin "pig";
> val it = "igpay" : string
- piglatin "ant";
> val it = "antyay" : string
Теперь есть угловые шкафы:
Что если слово пустое ""
?
- piglatin "";
! Uncaught exception:
! Subscript
Что если слово в верхнем регистре "Ant"
?
- piglatin "Ant";
> val it = "ntAay" : string
Эти две проблемы необходимо решить, чтобы сделать функцию piglatin
на основе строк надежной и всего .
Вот несколько отзывов о решении, которое вы разместили:
- Не пишите
if P then true else Q
; написать P orelse Q
.
- Не пишите
isVowel c = true
; написать isVowel c
.
aL
и plx
не лучшие имена функций; Я не уверен точно, что они должны делать, кроме как действовать как клей между pl
и cycle
, isVowel
, explode
и implode
.