Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вычисления скалярного произведения векторов, DrRacket 
:(
    Опции темы
203
Дата 9.10.2015, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 30.12.2013

Репутация: нет
Всего: нет



Здравствуйте. Помогите пожалуйста реализовать программу для вычисления скалярного произведения двух векторов. Координаты двух векторов заданы в виде списка. Элементами списков являются только числа, длина списков одинаковая.
(В программе нельзя использовать встроенные функции и циклы)

Языка Scheme можно сказать что вообще не знаю, побывал что-то написать, не получилось

Пишу на DrRacket
Код

#lang racket
(define list1 (list 1 2))
(define list2 (list 3 4))
(if(null? list1) (null? list2)
  (* (car list1) (car list2)))
  (define x (list-ref list1 1))
  (define y (list-ref list2 1))
  (* x y)



Заранее спасибо.
PM MAIL   Вверх
tzirechnoy
Дата 9.10.2015, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: нет
Всего: 16



Цитата
(В программе нельзя использовать встроенные функции и циклы)


Учитывая, что +, -, *, > -- это встроенные функцыи -- ты, похожэ, как-то крепко попал... Ну, или не понял условие задачи.
PM MAIL   Вверх
jsharp36
Дата 10.10.2015, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 8.10.2011

Репутация: нет
Всего: 1



Код

#lang racket
(define list1 (list 1 2))
(define list2 (list 3 4))

(define (product l1 l2) 
  (cond ((null? l1) 0)
        ((null? l2) 0)
        (else (+
                (* (car l1) (car l2))
                (product (cdr l1) (cdr l2))))))



Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
jsharp36
Дата 10.10.2015, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 8.10.2011

Репутация: нет
Всего: 1



Читайте SICP

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
203
Дата 10.10.2015, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 30.12.2013

Репутация: нет
Всего: нет



Цитата(tzirechnoy @ 9.10.2015,  21:18)
Цитата
(В программе нельзя использовать встроенные функции и циклы)


Учитывая, что +, -, *, > -- это встроенные функцыи -- ты, похожэ, как-то крепко попал... Ну, или не понял условие задачи.

Извините, не правильно сформулировал

Цитата

Код

#lang racket
(define list1 (list 1 2))
(define list2 (list 3 4))

(define (product l1 l2) 
  (cond ((null? l1) 0)
        ((null? l2) 0)
        (else (+
                (* (car l1) (car l2))
                (product (cdr l1) (cdr l2))))))



Спасибо большое за ответ.
Подскажите пожалуйста как вывести результат, а то программа выполняется а ответ не выводит.
Хотел ещё спросить, как допустим сложить ответы списков. Сейчас в программе на выходе 2 числа допустим это 3 и 8, как их сложить между собой, чтобы в ответе получилось одно число 11.
PM MAIL   Вверх
jsharp36
Дата 11.10.2015, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 8.10.2011

Репутация: нет
Всего: 1



В интерактивном окне напишите после знака >

(product list1 list2)

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
203
Дата 9.11.2015, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 30.12.2013

Репутация: нет
Всего: нет



Спасибо за ответы, может ещё кто поможет сделать эту задачу с помощью макросов если не трудно. Вот последний мой вариант задачи (там 2 способа решения)

Код

#lang racket
(define list1 (list 2 2))
(define list2 (list 3 -3))
 
(define (var1 l1 l2) 
  (cond ((null? l1) 0)
        ((null? l2) 0)
        (else (+
                (* (car l1) (car l2))
                (var1 (cdr l1) (cdr l2))))))
 
(define (var2 l1 l2)
  (cond ((null? l1) 0)
        ((null? l2) 0)
        (else
         (apply +(map * l1 l2)))))
 
(if (= (var2 list1 list2) 0) 'ortogonalni 'neortogonalni)

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума LISP
Void
  • Пожалуйста, создавайте темы с содержательными названиями.
  • Lisp — это целое семейство языков. Всегда указывайте в теме используемый диалект (Common Lisp, Scheme и т.д.).
  • Уважаемые учащиеся, здесь всегда рады помочь Вам, но не делать за Вас вашу работу. У вас гораздо больше шансов получить помощь, если Вы приложите усилия и поделитесь с нами проблемами и результатами. В противном случае добро пожаловать в раздел Центр Помощи.
  • Получив ответ на интересующий Вас вопрос, не забудьте пометить его как решённый.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | LISP | Следующая тема »


 




[ Время генерации скрипта: 0.1238 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.