Kipu to system zapisu liczb i innych danych stosowany przez Indian andyjskich (m.in. w państwie Inków). Polegał on na utrwalaniu danych za pomocą węzłów wiązanych na sznurkach, których sekwencje odchodziły od sznurka głównego (poziomego).
Zdefiniuj procedurę KIPU :słowa, gdzie dana :słowa jest niepustą listą słów złożonych z małych liter alfabetu łacińskiego (bez polskich znaków diakrytycznych), rysującą sznurki z węzłami. Co trzecią literę alfabetu poczynając od a (czyli litery a, d, g itd.) kodujemy węzłem pojedynczym (obrócony kwadrat), co trzecią literę poczynając od b (b, e, h itd.) węzłem podwójnym (dwa kwadraty, wierzchołek drugiego leży w środku pierwszego), pozostałe węzłem potrójnym (trzy kwadraty) – patrz przykłady. Każde kolejne słowo kodowane jest jednym pionowym sznurkiem. Odstępy pomiędzy węzłami-literami są równe przekątnej pojedynczego kwadratu, a odstępy pomiędzy pionowymi sznurkami dwóm przekątnym. Rysunek musi mieścić się na ekranie i spełniać jeden z dwóch warunków: długość sznurka głównego wynosi 600 lub długość najdłuższego pionowego sznurka wynosi 400.
Powyżej widać efekty wywołań KIPU [a b c abc] oraz KIPU [ala ma kota].
Zdefiniuj procedurę PROS :lista :s :w rysującą na środku ekranu ciąg prostokątów. Danymi procedury są: :lista - niepusta lista słów składających się z małych liter alfabetu łacińskiego (bez polskich znaków diakrytycznych), z których każde zawiera co najmniej jedną samogłoskę i co najmniej jedną spółgłoskę, :s - określa szerokość rysunku, a :w - określa wysokość rysunku. Kolejne prostokąty odpowiadają kolejnym słowom. Dolne boki prostokątów stanowią dolną krawędź rysunku. Dwa sąsiednie prostokąty mają wspólny fragment jednego z pionowych boków. Szerokości poszczególnych prostokątów są proporcjonalne do liczby spółgłosek w poszczególnych słowach. Wysokości poszczególnych prostokątów są proporcjonalne do liczby samogłosek w poszczególnych słowach.
Poniżej widać efekty wywołań PROS [ala ma kota] 222 111 oraz PROS [abrakadabra hokus pokus] 360 111.
Zdefiniuj funkcję ILEL :lista, gdzie dana :lista jest dowolną listą. Zadaniem funkcji jest analiza wszystkich małych liter alfabetu łacińskiego (bez polskich znaków diakrytycznych), występujących w zapisie danej :lista. Podczas tej analizy wszystkie pozostałe znaki są pomijane. Wynikiem funkcji jest lista dwuelementowych list zawierających literę i liczbę jej wystąpień w danej :lista. Kolejność elementów w liście wynikowej wynika z kolejności liter w alfabecie. Jeśli jakaś litera nie występuje w danej :lista, to w wynikowej liście stosowny element jest pomijany.
ILEL [alamakota] | [[a 4][k 1][l 1][m 1][o 1][t 1]] |
---|---|
ILEL [abrakadabra [] [[[] hokus] pokus]] | [[a 5][b 2][d 1][h 1][k 3][o 2][p 1][r 2][s 2][u 2]] |
Zdefiniuj funkcję SCALAJ :listyliczb, gdzie dana :listyliczb jest niepustą listą uporządkowanych niemalejąco list liczbowych. Wynikiem funkcji jest uporządkowana niemalejąco lista ze scalonymi liczbami z list danej :listyliczb.
SCALAJ [[2 4 6 8 10][1 3 5][1 2 3]] | [1 1 2 2 3 3 4 5 6 8 10] |
---|---|
SCALAJ [[3 4 5][1 2][6]] | [1 2 3 4 5 6] |