LISP - Predicados
Predicados são funções que testam seus argumentos para algumas condições específicas e retornam nulo se a condição for falsa ou se algum valor não nulo for verdadeiro.
A tabela a seguir mostra alguns dos predicados mais comumente usados -
Sr. Não. | Predicado e descrição |
---|---|
1 | atom Leva um argumento e retorna t se o argumento for um átomo ou nil se o contrário. |
2 | equal Leva dois argumentos e retorna t se eles são estruturalmente iguais ou nil de outra forma. |
3 | eq Leva dois argumentos e retorna t se eles são os mesmos objetos idênticos, compartilhando o mesmo local de memória ou nil de outra forma. |
4 | eql Leva dois argumentos e retorna t se os argumentos são eq, ou se eles são números do mesmo tipo com o mesmo valor, ou se eles são objetos de personagem que representam o mesmo personagem, ou nil de outra forma. |
5 | evenp Leva um argumento numérico e retorna t se o argumento for um número par ou nil caso contrário. |
6 | oddp Leva um argumento numérico e retorna t se o argumento é um número ímpar ou nil caso contrário. |
7 | zerop Leva um argumento numérico e retorna t se o argumento é zero ou nil caso contrário. |
8 | null Leva um argumento e retorna t se o argumento for avaliado como nulo, caso contrário, ele retorna nil. |
9 | listp Leva um argumento e retorna t se o argumento for avaliado como uma lista, caso contrário ele retorna nil. |
10 | greaterp Leva um ou mais argumentos e retorna t se houver um único argumento ou se os argumentos forem sucessivamente maiores da esquerda para a direita, ou nil caso contrário. |
11 | lessp Leva um ou mais argumentos e retorna t se houver um único argumento ou se os argumentos forem sucessivamente menores da esquerda para a direita, ou nil caso contrário. |
12 | numberp Leva um argumento e retorna t se o argumento é um número ou nil caso contrário. |
13 | symbolp Leva um argumento e retorna t se o argumento é um símbolo, caso contrário ele retorna nil. |
14 | integerp Leva um argumento e retorna t se o argumento for um inteiro, caso contrário ele retorna nil. |
15 | rationalp Leva um argumento e retorna t se o argumento é um número racional, uma proporção ou um número, caso contrário, ele retorna nil. |
16 | floatp Leva um argumento e retorna t se o argumento é um número de ponto flutuante, caso contrário ele retorna nil. |
17 | realp Leva um argumento e retorna t se o argumento é um número real, caso contrário ele retorna nil. |
18 | complexp Leva um argumento e retorna t se o argumento é um número complexo, caso contrário ele retorna nil. |
19 | characterp Leva um argumento e retorna t se o argumento for um caractere, caso contrário ele retorna nil. |
20 | stringp Leva um argumento e retorna t se o argumento é um objeto string, caso contrário, ele retorna nil. |
21 | arrayp Leva um argumento e retorna t se o argumento for um objeto de array, caso contrário ele retorna nil. |
22 | packagep Leva um argumento e retorna t se o argumento é um pacote, caso contrário ele retorna nil. |
Exemplo 1
Crie um novo arquivo de código-fonte denominado main.lisp e digite o seguinte código nele.
(write (atom 'abcd))
(terpri)
(write (equal 'a 'b))
(terpri)
(write (evenp 10))
(terpri)
(write (evenp 7 ))
(terpri)
(write (oddp 7 ))
(terpri)
(write (zerop 0.0000000001))
(terpri)
(write (eq 3 3.0 ))
(terpri)
(write (equal 3 3.0 ))
(terpri)
(write (null nil ))
Quando você executa o código, ele retorna o seguinte resultado -
T
NIL
T
NIL
T
NIL
NIL
NIL
T
Exemplo 2
Crie um novo arquivo de código-fonte denominado main.lisp e digite o seguinte código nele.
(defun factorial (num)
(cond ((zerop num) 1)
(t ( * num (factorial (- num 1))))
)
)
(setq n 6)
(format t "~% Factorial ~d is: ~d" n (factorial n))
Quando você executa o código, ele retorna o seguinte resultado -
Factorial 6 is: 720