Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Lisp
Перезагрузить страницу По списку, состоящему из атомов-чисел, составить список значений
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
super_girl super_girl вне форума
Member
 
Сообщений: 17
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 11.04.2007
По умолчанию По списку, состоящему из атомов-чисел, составить список значений - 11.04.2007, 09:37

Два дня сидела, не получается!
Помогите, кто чем может - ПОЖАЛУЙСТА!

задача такая:
По списку, состоящему из атомов-чисел, составить список значений exp(ai), где ai - i-й элемент
списка. Значения exp(ai) большие (ai+2) не учитывать. Если список пустой или среди его элементов
есть списки или атомы-символы, то значение функции nil.

Пожалуйста помогите - очень прошу!
Ответить с цитированием
  (#2 (permalink)) Старый
_sg _sg вне форума
Member
 
Аватар для _sg
 
Сообщений: 512
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 38 сообщениях
Регистрация: 23.01.2007
По умолчанию 11.04.2007, 11:52

Код:
(defun ex (w)
  (when w ((lambda (a d)
             (if (numberp a)
                 (if (< (exp a) (+ a 2))
                     (cons (exp a) (ex d))
                     (ex d))
                 (cons nil (ex d))))            
           (car w) (cdr w))))
(ex '(0.5 b 1 2 3 (10 20) 4))
(1.6487212 NIL 2.7182817 NIL)
Ответить с цитированием
  (#3 (permalink)) Старый
super_girl super_girl вне форума
Member
 
Сообщений: 17
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 11.04.2007
Wink 11.04.2007, 18:42

Цитата:
Код:
(defun ex (w)
  (when w ((lambda (a d)
             (if (numberp a)
                 (if (< (exp a) (+ a 2))
                     (cons (exp a) (ex d))
                     (ex d))
                 (cons nil (ex d))))            
           (car w) (cdr w))))
(ex '(0.5 b 1 2 3 (10 20) 4))
(1.6487212 NIL 2.7182817 NIL)
Спасибо, огромное! Забыла сказать, что надо на классическом лиспе писать, но это неважно
как-нибудь разберусь! Огромное,огромное спасибо!!!
Ответить с цитированием
  (#4 (permalink)) Старый
super_girl super_girl вне форума
Member
 
Сообщений: 17
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 11.04.2007
По умолчанию 11.04.2007, 21:08

Нифига не получается переделать - наверно руки
Пожалуйста , помогите еще раз!
Просто препод сказала, что надо на классическом лиспе писать,
типа без ифов, вайлов и т.д.
Если можете - очень надо! Спасибо заранее!
Ответить с цитированием
  (#5 (permalink)) Старый
VH VH вне форума
Member
 
Сообщений: 781
Сказал(а) спасибо: 0
Поблагодарили 11 раз(а) в 10 сообщениях
Регистрация: 29.06.2006
По умолчанию 12.04.2007, 01:55

Вариант с использованием (if) менее ортодоксальный:
Код:
(defun LIST_to_EXP (_list)
  (if _list
   ((lambda (head result)
     (if (numberp head)
      ((lambda (exp_head plus_head)
        (if (< exp_head plus_head)
         (cons exp_head result)
         result))
       (exp head)
       (+ head 2))))
    (car _list)
    (LIST_to_EXP (cdr _list)))))
Вариант с использованием (cond) более ортодоксальный:
Код:
(defun LIST_to_EXP (_list)
  (cond
   (_list
    ((lambda (head result)
      (cond
       ((numberp head)
        ((lambda (exp_head plus_head)
          (cond
           ((< exp_head plus_head) (cons exp_head result))
           (T result)))
         (exp head)
         (+ head 2)))))
     (car _list)
     (LIST_to_EXP (cdr _list))))))
Замена по схеме
(IF условие то-форма иначе-форма) <=> (COND (условие то-форма) (T иначе-форма))
соответственно
(IF условие то-форма) <=> (COND (условие то-форма))

Извиняюсь - несоответствие условию задачи.
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
super_girl super_girl вне форума
Member
 
Сообщений: 17
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 11.04.2007
По умолчанию 12.04.2007, 08:04

Цитата:
Вариант с использованием (cond) более ортодоксальный:
Код:
(defun LIST_to_EXP (_list)
  (cond
   (_list
    ((lambda (head result)
      (cond
       ((numberp head)
        ((lambda (exp_head plus_head)
          (cond
           ((< exp_head plus_head) (cons exp_head result))
           (T result)))
         (exp head)
         (+ head 2)))))
     (car _list)
     (LIST_to_EXP (cdr _list))))))
Замена по схеме
(IF условие то-форма иначе-форма) <=> (COND (условие то-форма) (T иначе-форма))
соответственно
(IF условие то-форма) <=> (COND (условие то-форма))

Извиняюсь - несоответствие условию задачи.
Спасибо огромное - вы меня просто спасли!
А небольшое несоответствие - это нестрашно!
очень вам благодарна!
Ответить с цитированием
  (#7 (permalink)) Старый
_sg _sg вне форума
Member
 
Аватар для _sg
 
Сообщений: 512
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 38 сообщениях
Регистрация: 23.01.2007
По умолчанию 12.04.2007, 10:19

Код:
(defun ex (w)
  (cond (w ((lambda (a d)
              (cond ((numberp a) (cond ((< (exp a) (+ a 2)) (cons (exp a) (ex d)))
                                       ((ex d))))
                    ((cons nil (ex d)))))
            (car w) (cdr w)))))
(ex '(0.5 b 1 2 3 (10 20) 4))
(1.6487212 NIL 2.7182817 NIL)
Ответить с цитированием
  (#8 (permalink)) Старый
VH VH вне форума
Member
 
Сообщений: 781
Сказал(а) спасибо: 0
Поблагодарили 11 раз(а) в 10 сообщениях
Регистрация: 29.06.2006
По умолчанию 12.04.2007, 13:12

>sg
Если список пустой или среди его элементов есть списки или атомы-символы, то значение функции nil.
Ответить с цитированием
  (#9 (permalink)) Старый
VH VH вне форума
Member
 
Сообщений: 781
Сказал(а) спасибо: 0
Поблагодарили 11 раз(а) в 10 сообщениях
Регистрация: 29.06.2006
По умолчанию 12.04.2007, 15:16

Причина несоответствия вышеприведенной программы требованиям задания:
при обнаружении на очередном уровне рекурсии неподходящего элемента списка функция возвращает nil, но такой же результат возвращается при успешном достижении конца списка с целью его наращивания "на обратном пути"; на предыдущий уровень рекурсии возвращается из различных "источников" одинаковый "сигнал", по которому нельзя различить "источник" и, соответственно, различным образом реагировать (то есть либо возвращать на предыдущий уровень тот же nil, требуемый заданием, либо наращивать "список возврата"); программа действует по второму варианту.
Вариант с использованием "накопителя" действует в соответствии с заданием:
Код:
(defun LIST_to_EXP (_list acc)
  (cond
   ((null _list) (reverse acc))
   (T
    ((lambda (head tail)
      (cond
       ((not (numberp head)) nil)
       (T
        (LIST_to_EXP
         tail
         ((lambda (exp_head plus_head)
           (cond
            ((< exp_head plus_head) (cons exp_head acc))
            (T acc)))
          (exp head)
          (+ head 2))))))
     (car _list)
     (cdr _list)))))
Форма вызова: (LIST_to_EXP список nil)
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задан список произвольного уровня вложенности,превратить его в список атомов Дрон Lisp 6 19.11.2014 22:38
Напишите функцию для lst1 и lst2, где lst1-список символьных атомов lulu Lisp 5 23.12.2011 21:01
Нужно разобрать программу для перевода списка арабских чисел в список римских чисел. RuslanTM Prolog 2 18.12.2011 17:04
Предложение в список атомов. Demei Prolog 1 14.05.2011 17:24
Определите функцию. которая по исходному списку строит новый список Masha11 Lisp 1 14.01.2011 15:33
Функция, по заданному списку карт возвращает список чисел Ghost92 Haskell 37 26.10.2010 19:37
Написать функцию, которая по линейному списку '(q w e r t y) строит сложный список Devil1991 Lisp 2 21.09.2010 09:03
Определите функцию,сортирующую список символьных атомов Prototip Lisp 0 16.12.2009 23:03
Составить список, состоящий из натуральных чисел OKSI55 Lisp 8 16.05.2008 12:39
Составить программу умножения чисел merk Assembler 0 25.03.2007 16:25
По произвольному списку построить соответсвующий ему одноуровневый список dark.58 Lisp 4 06.05.2006 11:39
Перенос значений из БД в простой список imported_MasterX Prolog 1 29.04.2005 10:01



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов