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


Автор: virux 22.2.2011, 19:47
дается трехзначный номер 123. Создайте список из этих цифры  напиши функцию (cifri3 n){эти цифры в список нужны как елементы}

Автор: VH_ 23.2.2011, 11:02
Код
(defun F (N &optional L)
 (if (zerop N) L
  (F
   (truncate N 10)
   (cons (rem N 10) L))))

Автор: virux 1.3.2011, 23:37
Цитата(VH_ @ 23.2.2011,  11:02)
Код
(defun F (N &optional L)
 (if (zerop N) L
  (F
   (truncate N 10)
   (cons (rem N 10) L))))

спс. конечно,

объясни словами эту строчку [(defun F (N &optional L)] пожалусто.

Автор: k0rvin 2.3.2011, 08:03
http://www.lispworks.com/documentation/HyperSpec/Body/m_defun.htm#defun

Автор: VH_ 2.3.2011, 10:26
Другой вариант
Код
(defun F (N)
 (cond
  ((minusp N) (cons '- (F (- N))))
  ((zerop N) (list N))
  ((< N 10) (list N))
  (T
   (append
    (F (truncate N 10))
    (list (rem N 10))))))

Автор: magelan 25.10.2011, 15:07
А таких схемовских штучек в CL нет?

Код

(define (f num)
    (map 
        (lambda (char)
            (string->number (string char))
        )
        (string->list (number->string num))
    )
)

Автор: k0rvin 28.10.2011, 15:50
Цитата(magelan @ 25.10.2011,  15:07)
А таких схемовских штучек в CL нет?

Код

(define (f num)
  (map (lambda (char)
         (string->number (string char)))
       (string->list (number->string num))))

это не схемовские штучки, но есть
Код

(defun f (n)
  (loop :for char :across (princ-to-string n)
        :collect (parse-integer (string char))))


но, так же как и в схеме, это менее эффективно, чем вариант VK

Автор: _sg 22.12.2012, 22:07
Код

(defun int>digits (n) 
  (loop for c across (write-to-string n) collect (digit-char-p c)))

> (int>digits 123)
(1 2 3)

Автор: _sg 22.12.2012, 23:17
Код

(defun int>digits (n) 
  (mapcar #'digit-char-p (coerce (write-to-string n) 'list)))

> (int>digits 123)
(1 2 3)


Добавлено @ 23:21
Код

(defun int>digits (n) 
  (mapcar #'digit-char-p (concatenate 'list (write-to-string n))))

> (int>digits 123)
(1 2 3)


Добавлено @ 23:24
Код

(defun int>digits (n) 
  (mapcar #'digit-char-p (map 'list #'identity (write-to-string n))))

> (int>digits 123)
(1 2 3)

Автор: _sg 25.4.2014, 16:50
Код

(defun int>digits (n) 
  (mapcar #'parse-integer (map 'list #'string (write-to-string n))))
> (int>digits 123)
(1 2 3)

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