Поскольку это похоже на учебное упражнение, а не на реальную проблему (исправьте меня, если я ошибаюсь), я постараюсь дать вам подсказку, чтобы вы могли найти решение самостоятельно, а не просто дать решение.
Как вы упомянули в комментариях, вы хотели перебрать все фильмы для каждой книги (чтобы проверить, существует ли фильм с таким же названием).Это хороший план.Лучший способ реализовать это - использовать две рекурсивные функции - одну для просмотра книг и другую для просмотра фильмов (в поисках фильма с определенным названием).
Структура кода должна выглядеть примерно такэто:
let rec movieWithTitleExists title (activities:Activity list) =
match activities with
| [] -> false
| Watch movie :: xs when movie.movieName = title -> (...)
| x :: xs -> (...)
let rec booksWithMovie (activities: Activity list): Book list =
match activities with
| [] -> []
| Book book :: xs when movieWithTitleExists book.bookName -> (...)
| x :: xs -> (...)
Я упустил пару вещей, чтобы вы могли кое-что выучить, выполнив упражнение.Тем не менее, я надеюсь, что пример синтаксиса поможет!В movieWithTitleExists
мы ищем фильм с таким названием.В booksWithMovie
мы ищем книгу так, чтобы в названии также было название фильма.
Заполнение (...)
в movieWithTitleExists
должно быть проще - вы хотите вернуть логическое значение, так что вы либонеобходимо вернуть константу или сделать рекурсивный вызов.
В booksWithMovie
вы хотите вернуть список книг, поэтому вам нужно будет вызвать функцию рекурсивно, а затем либо просто вернуть ее, либо добавитьтекущую книгу вперед, используя оператор ::
.