0 / 0 / 0
Регистрация: 11.05.2016
Сообщений: 7
|
|
1 | |
Scheme Определить функцию предикатного типа, которая определяет, что два S-выражения эквивалентны22.09.2017, 10:32. Показов 1361. Ответов 14
Нужна помощь "определить функцию предикатного типа которая определяет, два S-выражения эквивалентны". Можна использовать только базовые функции: define, lambda, cdr, car, pair?, list?, quote, eq? , eqv?, equal?, cond, cons и рекурсию.
Буду очень благодарен за помощь. Добавлено через 35 минут Можна использовать только базовые функции: define, lambda, cdr, car, pair?, list?, quote, eq? , eqv?, cond, cons и рекурсию.
0
|
22.09.2017, 10:32 | |
Ответы с готовыми решениями:
14
Описать логическую функцию, которая определяет, имеет ли файл f типа FR нечетную длину Описать логическую функцию mid(f) которая определяет, имеет ли файл f Типа FR четную длину Написать функцию kvadr с переменным числом параметров, которая определяет количество чисел, являющихся точными квадратами (2, 4, 9, 16,. . . ) типа in Написать функцию,которая определяет, верно ли что последняя цифры в числе 5 |
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
|
22.09.2017, 12:36 | 2 |
Вы сами будете писать или нет? Если да, поясните, что такое «S-выражения эквивалентны».
0
|
0 / 0 / 0
Регистрация: 11.05.2016
Сообщений: 7
|
||||||
22.09.2017, 13:13 [ТС] | 3 | |||||
Я написал код но он явно не правильный, S-выражения эквивалентны это значит что атомы, пары списки и т.п. (сделать сравнение например 2 списков если одинаковые то #t если нет то #f)
Ну и вот код мой
0
|
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
|
22.09.2017, 13:30 | 4 |
Что атомы, пары списки — что? (Интересно, что это — списка.)
А словами можете написать алгоритм, который реализуете?
0
|
0 / 0 / 0
Регистрация: 11.05.2016
Сообщений: 7
|
||||||
22.09.2017, 15:56 [ТС] | 5 | |||||
S-выражения могут быть как отдельными объектами (атомами), такими как числа, Символ, включая специальные символы nil и t, или точечными парами в виде (x . y). Более длинные списки, состоящие из вложенных точечных пар, например (1 . (2 . (3 . nil))), можно написать более привычным способом, как (1 2 3). Вложенные списки также могут быть записаны в виде S-выражений: ((молоко сок) (мёд мармелад)). S-выражения не зависят от пробелов и разрывов строк, пробелы используются только в качестве разграничителей между атомами.
Нужно чтобы каждый элемент проверяло между собой и выводило true если они одинаковые, если нет тогда false. Иными словами eq? это #t а все остальное это false. Например (a b c) (a b d) выходит что тут у нас будет false Добавлено через 2 часа 12 минут Вот и код:
0
|
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
|
22.09.2017, 16:26 | 6 |
Я знаю, что такое S-выражение. Вы не видите, у вас не хватает глагола?
Что атомы должны? Подозреваю, что вы хотите написать свою версию equal? В таком случае использовать саму эту функцию неспортивно. Вероятно, в этом месте должна быть рекурсия. А вас не смущает, что вы просто отбрасываете car-ы и не сравниваете их?
0
|
0 / 0 / 0
Регистрация: 11.05.2016
Сообщений: 7
|
|
22.09.2017, 16:46 [ТС] | 7 |
Да хочу сделать свой "equal?"
Я только второй день работаю из Scheme. Потому попросил помощи.
0
|
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
|
22.09.2017, 16:48 | 8 |
Пишите по-русски, сказуемые не забывайте.
Код ваш неправильный. Так вы напишете словами алгоритм?
0
|
0 / 0 / 0
Регистрация: 11.05.2016
Сообщений: 7
|
|
22.09.2017, 17:00 [ТС] | 9 |
1. Задаем определенные цифры или буквы
2. Перебираем сначала все первые элементы (car) 3. Перебираем все остальные элементы (cdr) 4. Сравниваем их между собой (eq?)
0
|
Модератор
|
||||||
22.09.2017, 18:53 | 10 | |||||
Сообщение было отмечено LordNightWolf как решение
Решение
2
|
0 / 0 / 0
Регистрация: 11.05.2016
Сообщений: 7
|
|
22.09.2017, 19:03 [ТС] | 11 |
Огромное спасибо вам))
0
|
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
|
22.09.2017, 19:49 | 12 |
Гм. Ну хотя бы ветку else надо бы предварить символом else, в схеме так делают.
1
|
4699 / 4394 / 380
Регистрация: 12.05.2012
Сообщений: 3,096
|
||||||
23.09.2017, 16:22 | 13 | |||||
вариант Common Lisp:
1
|
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
|
|
24.09.2017, 01:45 | 14 |
1
|
0 / 0 / 0
Регистрация: 11.05.2016
Сообщений: 7
|
||||||
07.10.2017, 13:49 [ТС] | 15 | |||||
0
|
07.10.2017, 13:49 | |
07.10.2017, 13:49 | |
Помогаю со студенческими работами здесь
15
Напишите перегруженную функцию power (), которая принимает два целочисленных параметра типа int и возвращает целочисленное значение типа int Файлы. Программа, которая определяет если такой момент, что два раза вошли по одному пропуску или два раза вышли по одному (выводит все время истину) Составить функцию, которая определяет, верно ли, что в заданном числе все цифры стоят по возрастанию Написать функцию, которая принимает два параметра типа unsignet short int Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |