Создание словаря в ракетке - PullRequest
0 голосов
/ 15 октября 2019

enter image description here Напишите функцию build-author-index, которая использует (listof Book) и список уникальных авторов (Strings). Функция создает AuthorIndex, где ключи - это использованные авторы (в том же порядке), а значения - названия всех книг этого автора в списке книг (также в том же порядке).

ниже мой кодЯ должен использовать Beginning Student с сокращенными списками. Мне разрешено использовать только минусы: первый, второй, третий, остальные, пустые ?, eq? cons ?, list, member? и length.

отправка изображения моего кода, так как переполнение стека не позволяет мне

1 Ответ

0 голосов
/ 18 октября 2019
#lang racket

(define my-bookshelf
  '((book-name-1 author-1)
    (book-name-2 author-2)
    (book-name-3 author-3)
    (book-name-4 author-4)
    (book-name-5 author-5)))


(define (bookname-of-given-author bookshelf author)
  (cond
    [(empty? bookshelf)
     (error "no this author")]
    [(equal? author (second (first bookshelf)))
     (first (first bookshelf))]
    [else
     (bookname-of-given-author (rest bookshelf) author)]))


;;; Test
(bookname-of-given-author my-bookshelf 'author-1)
(bookname-of-given-author my-bookshelf 'author-4)


(define (build-author-index bookshelf author-ls)
  (cond
    [(empty? author-ls) empty]
    [else
     (cons (bookname-of-given-author my-bookshelf (first author-ls))
           (build-author-index (rest bookshelf) (rest author-ls)))]))


;;; Test
(build-author-index my-bookshelf '(author-1 author-4))
(build-author-index my-bookshelf '(author-4 author-3 author-2 author-1))
...