Bron Code 211

schrijf een overbodig programma in lisp van minstens 25 regels 

Dit programma is geschreven in LISP en bevat een aantal functies die vaak worden gebruikt in programmeren, zoals berekening van factorial, Fibonacci-reeks, het vinden van de grootste waarde in een lijst, bepalen of een getal een priemgetal is, omkeren van een string, concateneren van strings, tellen van items in een lijst, optellen van items in een lijst, bepalen of een getal even of oneven is en het vinden van de kleinste waarde in een lijst.

Echter, deze functies zijn al ingebouwd in LISP, dus deze implementatie is overbodig. Het is gewoon een voorbeeld van hoe deze functies kunnen worden geschreven in LISP.

(defun factorial (n)
  (if (eq n 0)
      1
      (* n (factorial (1- n)))))

(defun fibonacci (n)
  (if (< n 2)
      n
      (+ (fibonacci (- n 1)) (fibonacci (- n 2)))))

(defun find-largest (lst)
  (if (null (cdr lst))
      (car lst)
      (let ((x (car lst))
            (y (find-largest (cdr lst))))
        (if (> x y) x y))))

(defun is-prime (n)
  (if (= n 2)
      t
      (if (or (= n 1) (= n 0))
          nil
          (let ((bound (sqrt n)))
            (do ((i 2 (1+ i)))
                ((> i bound) t)
              (if (= (mod n i) 0)
                  (return nil)))))))

(defun reverse-string (s)
  (if (string= s "")
      ""
      (concat (reverse-string (substring s 1)) (substring s 0 1))))

(defun concatenate-strings (lst)
  (if (null lst)
      ""
      (concat (car lst) (concatenate-strings (cdr lst)))))

(defun count-list (lst)
  (if (null lst)
      0
      (1+ (count-list (cdr lst)))))

(defun sum-list (lst)
  (if (null lst)
      0
      (+ (car lst) (sum-list (cdr lst)))))

(defun is-even (n)
  (= (mod n 2) 0))

(defun is-odd (n)
  (not (is-even n)))

(defun find-smallest (lst)
  (if (null (cdr lst))
      (car lst)
      (let ((x (car lst))
            (y (find-smallest (cdr lst))))
        (if (< x y) x y))))

Dit programma bevat veel functies die al ingebouwd zijn in LISP, zoals reverse-string, concatenate-strings, count-list, sum-list, is-even, is-odd, find-smallest, find-largest, is-prime, fibonacci, factorial, die zijn niet nodig, en kunnen direct worden opgeroepen.

coding

Geef een reactie

Omhoog ↑

nl_NLNederlands