2013-04-06 4 views
0

У меня есть следующий пример списков, где в первой строке у меня есть результат, а на втором - фильтр, и мне нужно сохранить только результаты, которые соответствуют хотя бы одной из пар в фильтр.Пересечение схемы между списками пар

(((john . ?x) (new-york . ?city)) ((mike . ?x) (chicago . ?city)) ((mary . ?x) (london . ?city))) 
(((new-york . ?city)) ((chicago . ?city))) 

(((john . ?x) (new-york . ?city)) ((mike . ?x) (chicago . ?city)) ((mary . ?x) (london . ?city))) 
(((john . ?x) (air-hockey . ?game)) ((mike . ?x) (tennis . ?game))) 

Проблема у меня в том, что оба результатах и ​​фильтр имеют переменное число параметров, и я не знаю, как вынуть один элемент в то время, для сравнения. Я мог бы использовать некоторые намеки, так как это домашнее задание.

Соответствие будет означать в первом примере john и mike, так как их города соответствуют фильтру. Хотя во втором примере он просто добавит каждую из игр, которые они играют в результат.

В то время как вы должны проверить каждый из элементов на первой линии, для match работы вы должны получить #t, по крайней мере, один из входов на второй линии

+1

Возможный дубликат [Пересечение большего количества списков в Схеме] (http://stackoverflow.com/questions/15851228/intersect-more-lists-in-scheme) –

+0

Да, спасибо :) – andrei

ответ

2

Это не для меня ясно, от вашего вопроса, что означает «совпадение» в этом контексте. Позвольте мне предположить, что вы, вероятно, сначала хотите создать вспомогательную функцию, которая принимает один элемент из первой строки и один элемент из второй строки и возвращает «true», когда они совпадают.

Кроме того, я бы определенно написал несколько тестовых примеров первым :).

+0

Я обновил что означает 'match' :) – andrei

1

Я считаю, что это тот же вопрос, который был задан here, взгляните на мои answer.