Прежде всего создайте функцию, чтобы сгладить список. Примерно так:
> (flatten '((8) 4 ((7 4) 5) ((())) (((6))) 7 2 ()))
(8 4 7 4 5 6 7 2)
А затем найдите свой номер в обычном списке.
Этот вопрос выглядит как домашнее задание, поэтому постарайтесь разработать эту функцию самостоятельно, а если вы не можете это сделать - опубликуйте здесь свой код, и я постараюсь вам помочь.
Обновлено
Ok. Как я понимаю, нам нужно создать функцию, которая получает список пар и возвращает другой список пар, где первый элемент пары равен некоторому числу.
Например:
(define data '((1 2)(2 3)(3 4)(3 5)(4 5)))
(solution data 3)
-> '((3 4) (3 5))
(define data '((1 2)(2 3)(3 4)(3 5)(4 5)))
(solution data 1)
-> '((1 2))
Другими словами, нам нужно отфильтровать наш список пар по некоторому условию. В схеме есть функция для фильтрации списка . Требуется список для фильтрации и функция для принятия решения - включить или нет элемент списка в список результатов.
Итак, нам нужно создать такую функцию:
(define (check-pair num p)
(cond
[(= (first p) num) #t]
[else #f]))
Эта функция получает пару (элемент списка), число и решает - включить или нет эту пару в список результатов. Эта функция имеет 2 параметра, но для функции фильтра требуется функция только с одним параметром, поэтому мы переписываем нашу функцию следующим образом:
(define (check-pair num)
(lambda (p)
(cond
[(= (first p) num) #t]
[else #f])))
Я создал функцию, которая производит другую функцию. Это карри .
Итак, у нас есть все для создания нашего решения:
(define (check-pair num)
(lambda (p)
(cond
[(= (first p) num) #t]
[else #f])))
(define (solution list num)
(local
((define check-pair-by-num (check-pair num)))
(filter check-pair-by-num list)))
(define data '((1 2)(2 3)(3 4)(3 5)(4 5)))
(solution data 1)