Здравствуйте, VladD2, Вы писали:
VD>Откровенно говоря тоже говнокод. Я бы это написал как-то так:
VD>VD>Compare(xs : string, ys : string) : int
VD>{
VD> | (x : tailX, y : tailY) when x != y => x - y // строка состоит из символов префиксов и продолжения и префиксы не равны
VD> | (x : tailX, y : tailY) when x == y => Compare(tailX, tailY) // тоже самое но префиксы равны, продолжаем рекурсивно...
VD> | ([], _ : _) => 1 // xs содержит пустой список, а ys - нет.
VD> | (_ : _, []) => -1 // наоборот
VD> | ([], []) => 0 // все символы равны и списки пусты
VD>}
VD>
VD>Вот это как-то ближе к идеалу. Сводим все к рекурсии и абстракции списка. А твой императивный говнокод читается не лучше дракона, хотя он и пушистее. Вопрос ведь не в занимаемой площади на экране, а в том насколько просто код понять.
А вот так нельзя? Или можно, но читается хуже?
Compare(xs : string, ys : string) : int
{
| (x : tailA, x : tailB) => Compare(tailA, tailB) // префиксы равны, продолжаем рекурсивно...
| (x : tailX, y : tailY) => x - y // префиксы не равны
| ([], _ : _) => 1 // xs содержит пустой список, а ys - нет.
| (_ : _, []) => -1 // наоборот
| ([], []) => 0 // все символы равны и списки пусты
}