Обръщане на списък на Lisp. Reverse!

Функция за деструктивно обръщане на списък.
От (1 2 3 4 5) => (5 4 3 2 1).

(define (reverse1 l)
  (if (null? l) '()
     (append (reverse1 (cdr l)) (list (car l)))
))
(define (reverse! l)
   (let ((l1 (reverse1 l)))
     (begin
     (set-cdr! l (cdr l1))
     (set-car! l (car l1))
     )
))
(define l (list 1 2 3))
(reverse! l)
l

Няма коментари

FPDF полезни функции

FPDF е клас на php за изработка на pdf документи. Чрез него може да направите точно каквото пожелаете.
За разлика от конвертирането на HTML към PDF, което не може да се контролира точно как ще се покаже, чрез FPDF имате пълен контрол.

Пълния контрол е свързан с много функции, по-дълго програмиране, но по-добър ефект.

Ето и няколко добри помощни функции, както и трикове за по-лесна употреба и контрол:

Задаване на разстояние между буквите (letter spacing):

function SetCharSpacing( $s_w , $s_l = 0) {
	$this->s_w = $s_w;
	$this->s_l = $s_l;
	$this->_out(
		'BT '.
		sprintf('%.3f Tc ', $this->s_w * $this->k).
		sprintf('%.3f Tw ', $this->s_l * $this->k).
		'ET '
	);
}

Изместване на текущата X, или Y позиция (без текст, без нов ред).

function Spacer($space) {
   $this->SetX($this->x + $space);
}

function SpacerY($space) {
    $this->y += $space;
}

Взимане дължината на реда:

function GetLineWidth() {
    return $this->w - $this->rMargin - $this->x;
}

Текст с булет за листа:

function SimpleListItem($w, $h, $txt, $border=0, $align='J', $fill=false, $listChar = '•') {
   $this->Spacer(6.4);
    $fs = $this->FontSizePt;
    $this->SetFont($this->FontFamily, '', 10);
    $this->Cell(6.4,3.5,$listChar);
    $this->SetFont($this->FontFamily, '', $fs);
    $this->MultiCell($w,$h,$txt,$border,$align,$fill);
}


Чекбокс, който се изразява в квадратче, което може да има тикче. Подобно на HTML chechbox, което се управлява само от една булева променлива

function Checkbox($checked = true) {
    $this->Rect($this->x,$this->y+0.4,4.1,3.8);
    if($checked) {
        $file = "images/checked.png";
        $w=3.5;
        $ax = $this->x+0.2;
        $ay = $this->y+0.6;
        $this->Image($file, $ax, $ay, $w, NULL, $type, $link);
    }
    $this->SetX($this->x + 4.1);
}

Има и други функции и класове, които са доста полезни:
Таблица, http://www.vonderborn.com/extended-tables-with-fpdf.php
HTML код, http://www.fpdf.de/downloads/addons/41/

Няма коментари

Число с нечетни цифри на Lisp

Тази функция взима число и връща друго създадено от нечетните цифри на 1-то. Или по-скоро преобразува число, като маха неговите четни цифри.
На  123456 връща 135

(define (make_number n)
  (define (get-num num)
    (if (odd? num)
        num
        0))
  (cond ((= n 0) 0)
        (else (+ (get-num (remainder n 10))
              (if (odd? (quotient (remainder n 100) 10)) (* 10 (make_number (quotient n 10)))
                  (make_number (quotient n 10)))))))
(make_number 123456789)

Няма коментари

Сума на четни цифри на Lisp

Ето и една функция на Lisp, за намиране на сумата от четните цифри на едно число.
Или на 2245533, ще върне 2+2+4=8

(define (even-digits n)
  (define (get-num num)
    (if (even? num)
        num
        0))
  (cond
    ((= n 0) 0)
    (else (+
           (get-num (remainder n 10))
           (even-digits (quotient n 10))))))
(even-digits 2222333)

Няма коментари

Премахване на елемент от вложени списъци Lisp

remove_deep премахва елемент от списък, които може да има като елемент други списъци.
Или от L = {1, 2, {3}, {4, 5, {6}}, 7}, може да премахнем всяко число с „remove_deep L x“.

(define (remove_deep l x)
  (define (cons_helper a b)
    (if (= x a)
        b
        (cons a b)))
  (cond 
    ((null? l) l)
    ((list? (car l))
     (cons (remove_deep (car l) x)
             (remove_deep (cdr l) x)))
    (else (cons_helper (car l)
                       (remove_deep (cdr l) x)))))
(remove_deep (list 2 5 3 (list 2 6 (list 2 3))) 3)

Няма коментари

  • Страница 4 от 9
  • <
  • 1
  • ...
  • 2
  • 3
  • 4
  • 5
  • ...
  • 9
  • >