Skip to content

Instantly share code, notes, and snippets.

@statonjr
Created December 6, 2010 02:58
Show Gist options
  • Save statonjr/729771 to your computer and use it in GitHub Desktop.
Save statonjr/729771 to your computer and use it in GitHub Desktop.
Nu functions
#!/usr/local/bin/nush
;; @name utilities.nu
;; @description A set of utilities for Nu
(function ++ (num)
(+ 1 num))
;; (puts (++ 15)) -> 16
(function last (some-list)
(cdr some-list))
;; (puts (last '(1 2 3 4))) -> (2 3 4)
(function empty? (a-list)
(eq 0 (a-list length)))
;; (puts (empty? '())) -> #t
(function number? (num)
(eq (num class) NSCFNumber))
;; (number? 1) -> #t
(function odd? (num)
(!= (% num 2) 0))
;; (odd? 5) -> #t
(function even? (num)
(eq (% num 2) 0))
;; (even? 4) -> #t
(function member? (obj a-list)
(eq ((a-list array) containsObject:obj) 1))
;; (member? 1 '(1 2 3 4)) -> t
(function cadr (a-list)
(car (cdr a-list)))
;; (cadr '(beef pork chicken)) -> pork
(function select (predicate a-list)
(cond ((empty? a-list) '())
((predicate (first a-list))
(cons (first a-list) (select predicate (cdr a-list))))
((else (select predicate (cdr a-list))))))
;; (select number? '(1 3 chocolate 4 yogurt)) -> '(1 3 4)
(function accumulate (+ a-list)
(if (empty? a-list)
0
(else
(+ (first a-list) (accumulate + (cdr a-list))))))
;; (accumulate + '(1 2 3 4)) -> 10
;; Compose
;; Takes 2 arguments
;; Returns an anonymous function that takes one argument
(function compose (f g)
(do (x) (f (g x))))
;; ((compose number? (do (x) (* x 4))) 3) -> #t
(function flatten (x)
(set rec (do (x acc)
(puts x)
(cond ((nil x) nil)
((atom x) (cons x acc))
((else
(rec (car x) (rec (cdr x) acc)))))))
(rec x nil))
;; (flatten '((1 2 3) (4 5 6) ('seven 'eight '(nine)))) -> (1 2 3 4 5 6 seven eight nine)
@statonjr
Copy link
Author

statonjr commented Dec 7, 2010

6 December 2010: Updated select function. Add flatten function, but doesn't quite work as expected.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment