LINUX.ORG.RU

CL как правильнее


0

1

Как правильнее?

(defun countitem (list item)
     "Возвращает количество вхождений данного числа в список"
	     (let ((result 0))
	       (dolist (x list)
		 (when (= x item)
		   (setf result (+ result 1))))
	       result
	     ))
или

(defun countitem (list item &optional (count 0))
    "Возвращает количество вхождений данного числа в список" 
	    (if  (NULL list)
	      count
	      (if (= (car list) item)
		  (countitem (cdr list) item (1+ count))
		  (countitem (cdr list) item count))))


Последнее исправление: NewHackersIgnat (всего исправлений: 1)

? (count 5 '(1 2 3 4 5 5 5 4 3 2 1))
3
mv ★★★★★
()
Ответ на: комментарий от NewHackersIgnat

(defun countitem (list item)
  "Возвращает количество вхождений item в список list"
  (let ((result 0))
    (dolist (x list result)
      (when (eql item x)
        (incf result)))))
korvin_ ★★★★★
()
Ответ на: комментарий от NewHackersIgnat

Если бы функции count не было вы бы как написали?

(loop for x in '(1 2 3 4 5 5 5 4 3 2 1)
      when (= x 5)
        count x)

(reduce #'(lambda (acc x)
            (if (= x 5)
                (1+ acc)
                acc))
        '(1 2 3 4 5 5 5 4 3 2 1)
        :initial-value 0)

(apply #'+ (mapcar #'(lambda (x)
                       (if (= x 5) 1 0))
                   '(1 2 3 4 5 5 5 4 3 2 1)))
mv ★★★★★
()

а насколько реально поиметь порт loop в R? а то тамошний for примитивен, а apply не всегда удобен. насколько обширен loop что бы имело смысл его портировать?

psv1967 ★★★★★
()
Ответ на: комментарий от psv1967

> а насколько реально поиметь порт loop в R? насколько обширен loop что бы имело смысл его портировать?

Именно буквальный порт нереально, loop одна из самых больших библиотек. Только если переписывать заново с учетом специфи.

antares0 ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.