Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > LISP > Помогите с задачей


Автор: Bananza 17.6.2010, 14:12
Всем доброго дня. Помогите с задачкой на Lisp.
Можно решить двумя способами в рекурсивном варианте и в  итерационном варианте.

А вот и сама задача.
Заменять все отрицательные элементы списка значением 0. 
 
Пример:
 >(name ‘(1 -5 6 -7 8 -9 -4))  
(1 0 6 0 8 0 0)  

Вот моё решение, но оно не работает. smile 
(defun name (1 -5 6 -7 8 -9 -4))
(cond ((> name 0) 0)
)
)

Автор: VH_ 17.6.2010, 17:53
Код

(defun F (L)
 (cond
  ((null L) nil)
  ((minusp (car L)) (cons 0 (F (cdr L))))
  (T (cons (car L) (F (cdr L))))))

Автор: k0rvin 17.6.2010, 18:04
Код

(defun f (lst)
  (do ((xs lst (cdr xs)) acc)
      ((null xs) (reverse acc))
    (push (if (minusp (car xs))
              0 (car xs))
          acc)))

Автор: Bananza 18.6.2010, 11:27
Спасибо Вам большое ребята. Неожидал, что так быстро ответят на мой вопрос.

Автор: wwall 25.6.2010, 10:21
#lang racket
(define newList '(1 -5 6 -7 8 -9 -4))

(map (lambda(x) (max x 0)) newList)

(define (rec-work x)
  (printf "~a" x)
  (if (null? x)
      null
      (append (list (max 0 (car x))) (rec-work (cdr x)))))


(rec-work newList)

вариант для схемы

Автор: _sg 25.4.2014, 12:23
как вариант:
Код

(defun minus-0 (w &aux (a (car w)))
  (when w (cons (if (minusp a) 0 a) (minus-0 (cdr w)))))

> (minus-0 '(-1 2 -3 4 -5 7))
(0 2 0 4 0 7)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)