Я пытаюсь завершить последнюю часть моей домашней работы на Haskell, и я застрял, мой код пока:
data Entry = Entry (String, String)
class Lexico a where
(<!), (=!), (>!) :: a -> a -> Bool
instance Lexico Entry where
Entry (a,_) <! Entry (b,_) = a < b
Entry (a,_) =! Entry (b,_) = a == b
Entry (a,_) >! Entry (b,_) = a > b
entries :: [(String, String)]
entries = [("saves", "en vaut"), ("time", "temps"), ("in", "<`a>"),
("{", "{"), ("A", "Un"), ("}", "}"), ("stitch", "point"),
("nine.", "cent."), ("Zazie", "Zazie")]
build :: (String, String) -> Entry
build (a, b) = Entry (a, b)
diction :: [Entry]
diction = quiksrt (map build entries)
size :: [a] -> Integer
size [] = 0
size (x:xs) = 1+ size xs
quiksrt :: Lexico a => [a] -> [a]
quiksrt [] = []
quiksrt (x:xs)
|(size [y|y <- xs, y =! x]) > 0 = error "Duplicates not allowed."
|otherwise = quiksrt [y|y <- xs, y <! x]++ [x] ++ quiksrt [y|y <- xs, y >! x]
english :: String
english = "A stitch in time save nine."
show :: Entry -> String
show (Entry (a, b)) = "(" ++ Prelude.show a ++ ", " ++ Prelude.show b ++ ")"
showAll :: [Entry] -> String
showAll [] = []
showAll (x:xs) = Main.show x ++ "\n" ++ showAll xs
main :: IO ()
main = do putStr (showAll ( diction ))
Вопрос задает:
Напишите программы на Haskell, которые занимают
английское предложение «английский», выглядит
до каждого слова на английском-французском
словарь с использованием бинарного поиска,
выполняет дословную замену,
собирает французский перевод и
распечатывает.
Функция 'быстрая сортировка' отклоняет
повторяющиеся записи (с 'error' / abort)
так что есть точно один француз
определение для любого английского слова. Тестовое задание
'Быстрая сортировка' с оригиналом
'raw_data' и после добавления
'("сохраняет", "sauve")' до 'raw_data'.
Вот поздняя остановка фон Неймана
версия бинарного поиска. Делать
буквальная транслитерация на Haskell.
Сразу после входа в Haskell
версия должна проверять рекурсивную
«инвариант цикла», оканчивающийся на
'error' / abort, если он не удерживается. Это
также заканчивается таким же образом, если
английское слово не найдено.
function binsearch (x : integer) : integer
local j, k, h : integer
j,k := 1,n
do j+1 <> k --->
h := (j+k) div 2
{a[j] <= x < a[k]} // loop invariant
if x < a[h] ---> k := h
| x >= a[h] ---> j := h
fi
od
{a[j] <= x < a[j+1]} // termination assertion
found := x = a[j]
if found ---> return j
| not found ---> return 0
fi
В версии на Haskell
binsearch :: String -> Integer -> Integer -> Entry
как постоянный словарь 'a' типа
«[Entry]» виден во всем мире. Подсказка:
Сделайте вашу строку (английское слово) в
«Вход» сразу после входа
'Binsearch'.
Значение программирования
высокоуровневый тип данных «Ввод» таков,
если вы можете разработать эти две функции
через целые числа, это тривиально
поднимите их, чтобы работать над Энтри.
Кто-нибудь знает, как мне поступить с функцией бинарного поиска?