1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-04-29 19:30:36 +02:00

Improve the documentation for 'nil?'.

* libguile/boolean.c (scm_nil_p): Improve docstring.
* doc/ref/api-languages.texi (Nil): Add documentation for 'nil?', along
with a description of how Elisp interprets Scheme booleans and
end-of-list.
This commit is contained in:
Mark H Weaver 2018-10-14 01:32:58 -04:00 committed by Andy Wingo
parent e4da1b456a
commit 0c0a658c56
2 changed files with 30 additions and 4 deletions

View file

@ -1,7 +1,7 @@
@c -*-texinfo-*-
@c This is part of the GNU Guile Reference Manual.
@c Copyright (C) 1996, 1997, 2000, 2001, 2002, 2003, 2004, 2010
@c Free Software Foundation, Inc.
@c Copyright (C) 1996, 1997, 2000, 2001, 2002, 2003, 2004, 2010, 2016,
@c 2017, 2018 Free Software Foundation, Inc.
@c See the file guile.texi for copying conditions.
@node Other Languages
@ -108,6 +108,24 @@ code to maintain their current semantics. @code{nil}, which in Elisp
would just be written and read as @code{nil}, in Scheme has the external
representation @code{#nil}.
In Elisp code, @code{#nil}, @code{#f}, and @code{'()} behave like
@code{nil}, in the sense that they are all interpreted as @code{nil} by
Elisp @code{if}, @code{cond}, @code{when}, @code{not}, @code{null}, etc.
To test whether Elisp would interpret an object as @code{nil} from
within Scheme code, use @code{nil?}:
@deffn {Scheme Procedure} nil? obj
Return @code{#t} if @var{obj} would be interpreted as @code{nil} by
Emacs Lisp code, else return @code{#f}.
@lisp
(nil? #nil) @result{} #t
(nil? #f) @result{} #t
(nil? '()) @result{} #t
(nil? 3) @result{} #f
@end lisp
@end deffn
This decision to have @code{nil} as a low-level distinct value
facilitates interoperability between the two languages. Guile has chosen
to have Scheme deal with @code{nil} as follows:

View file

@ -1,4 +1,4 @@
/* Copyright 1995-1996,2000-2001,2006,2008-2011,2018
/* Copyright 1995-1996,2000-2001,2006,2008-2011,2018,2019
Free Software Foundation, Inc.
This file is part of Guile.
@ -65,7 +65,15 @@ SCM_DEFINE (scm_not, "not", 1, 0, 0,
SCM_DEFINE (scm_nil_p, "nil?", 1, 0, 0,
(SCM x),
"Return @code{#t} iff @var{x} is nil, else return @code{#f}.")
"Return @code{#t} if @var{x} would be interpreted as @code{nil}\n"
"by Emacs Lisp code, else return @code{#f}.\n"
"\n"
"@example\n"
"(nil? #nil) @result{} #t\n"
"(nil? #f) @result{} #t\n"
"(nil? '()) @result{} #t\n"
"(nil? 3) @result{} #f\n"
"@end example")
#define FUNC_NAME s_scm_nil_p
{
return scm_from_bool (scm_is_lisp_false (x));