From bug-octave-request at bevo dot che dot wisc dot edu Wed Apr 4 11:27:47 2001 Subject: multiple list elements From: Ben Sapp To: bug-octave at bevo dot che dot wisc dot edu Date: Wed, 04 Apr 2001 10:27:48 -0600 This is a multi-part message in MIME format. --------------E447761D889F9329D6E8F561 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Bug report for Octave 2.1.33 configured for %OCTAVE_CANONICAL_HOST_TYPE% Description: ----------- This is really more of a feature request with a patch to implement the feature than it is a bug report. When dealing with lists in octave it would be nice to specify multiple values for the nth command and extract them all at once. Currently something like the following would have to be done: octave:1> lst = list(1,"second",3,"fourth") lst = ( [1] = 1 [2] = second [3] = 3 [4] = fourth ) octave:2> first = nth(lst,1) first = 1 octave:3> second = nth(lst,2) second = second octave:4> It would be nice if you could do it like above but also like this: octave:1> lst = list(1,"second",3,"fourth") lst = ( [1] = 1 [2] = second [3] = 3 [4] = fourth ) octave:2> [first,second] = nth(lst,[1,2]) first = 1 second = second octave:3> So, we do not lose any thing but, we do gain a little flexibility. Fix: --- Apply the attached patch. Configuration (please do not edit this section): ----------------------------------------------- uname output: IRIX64 boondaq 6.5 10120733 IP27 configure opts: --prefix=/hosts/boondaq/usr3/ben/octave-2.1.33/ Fortran compiler: g77 FFLAGS: -O F2C: F2CFLAGS: FLIBS: -lg2c -lm -L/usr/local/lib/gcc-lib/mips-sgi-irix6.5/2.95.2 -L/usr/local/mips-sgi-irix6.5/lib -L/usr/bin -L/usr/local/lib -lm -L/usr/lib32/mips3 -L/usr/lib32 CPPFLAGS: INCFLAGS: -I. -I. -I./liboctave -I./src -I./libcruft/misc -I./glob -I./glob C compiler: gcc, version 2.95.2 19991024 (release) CFLAGS: -g -O2 -Wall CPICFLAG: C++ compiler: c++, version 2.95.2 19991024 (release) CXXFLAGS: -g -O2 -Wall CXXPICFLAG: LDFLAGS: -g LIBFLAGS: -L. RLD_FLAG: -L/hosts/boondaq/usr3/ben/octave-2.1.33//lib/octave-2.1.33 TERMLIBS: -lcurses LIBS: -ldl -lsocket -lsun -lz -lm LEXLIB: LIBPLPLOT: LIBDLFCN: LIBGLOB: ./glob/glob.o ./glob/fnmatch.o DEFS: -DOCTAVE_SOURCE=1 -DSEPCHAR=':' -DSEPCHAR_STR=":" -DUSE_READLINE=1 -D__NO_MATH_INLINES=1 -DCXX_NEW_FRIEND_TEMPLATE_DECL=1 -DHAVE_LIBM=1 -DHAVE_LIBZ=1 -DF77_APPEND_UNDERSCORE=1 -DHAVE_LIBSUN=1 -DHAVE_LIBSOCKET=1 -DSIZEOF_SHORT=2 -DSIZEOF_INT=4 -DSIZEOF_LONG=4 -DSIZEOF_LONG_LONG=8 -DHAVE_ALLOCA_H=1 -DHAVE_ALLOCA=1 -DNPOS=std::string::npos -DSTDC_HEADERS=1 -DHAVE_DIRENT_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_SYS_WAIT_H=1 -DHAVE_ASSERT_H=1 -DHAVE_CURSES_H=1 -DHAVE_DLFCN_H=1 -DHAVE_FCNTL_H=1 -DHAVE_FLOAT_H=1 -DHAVE_FNMATCH_H=1 -DHAVE_GLOB_H=1 -DHAVE_GRP_H=1 -DHAVE_IEEEFP_H=1 -DHAVE_LIMITS_H=1 -DHAVE_MEMORY_H=1 -DHAVE_NAN_H=1 -DHAVE_POLL_H=1 -DHAVE_PWD_H=1 -DHAVE_SGTTY_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_SYS_IOCTL_H=1 -DHAVE_SYS_PARAM_H=1 -DHAVE_SYS_POLL_H=1 -DHAVE_SYS_RESOURCE_H=1 -DHAVE_SYS_SELECT_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_SYS_TIME_H=1 -DHAVE_SYS_TIMES_H=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_UTSNAME_H=1 -DHAVE_TERMIO_H=1 -DHAVE_UNISTD_H=1 -DHAVE_VARARGS_H=1 -DHAVE_ATEXIT=1 -DHAVE_BCOPY=1 -DHAVE_BZERO=1 -DHAVE_DUP2=1 -DHAVE_ENDGRENT=1 -DHAVE_ENDPWENT=1 -DHAVE_EXECVP=1 -DHAVE_FCNTL=1 -DHAVE_FORK=1 -DHAVE_GETCWD=1 -DHAVE_GETEGID=1 -DHAVE_GETEUID=1 -DHAVE_GETGID=1 -DHAVE_GETGRENT=1 -DHAVE_GETGRGID=1 -DHAVE_GETGRNAM=1 -DHAVE_GETHOSTNAME=1 -DHAVE_GETPGRP=1 -DHAVE_GETPID=1 -DHAVE_GETPPID=1 -DHAVE_GETPWENT=1 -DHAVE_GETPWNAM=1 -DHAVE_GETPWUID=1 -DHAVE_GETTIMEOFDAY=1 -DHAVE_GETUID=1 -DHAVE_GETWD=1 -DHAVE_LINK=1 -DHAVE_LOCALTIME_R=1 -DHAVE_LSTAT=1 -DHAVE_MEMMOVE=1 -DHAVE_MKDIR=1 -DHAVE_MKFIFO=1 -DHAVE_PIPE=1 -DHAVE_POLL=1 -DHAVE_PUTENV=1 -DHAVE_READLINK=1 -DHAVE_RENAME=1 -DHAVE_RINDEX=1 -DHAVE_RMDIR=1 -DHAVE_SELECT=1 -DHAVE_SETGRENT=1 -DHAVE_SETPWENT=1 -DHAVE_SETVBUF=1 -DHAVE_SIGACTION=1 -DHAVE_SIGPENDING=1 -DHAVE_SIGPROCMASK=1 -DHAVE_SIGSUSPEND=1 -DHAVE_STAT=1 -DHAVE_STRCASECMP=1 -DHAVE_STRDUP=1 -DHAVE_STRERROR=1 -DHAVE_STRFTIME=1 -DHAVE_STRNCASECMP=1 -DHAVE_STRPTIME=1 -DHAVE_SYMLINK=1 -DHAVE_TEMPNAM=1 -DHAVE_UMASK=1 -DHAVE_UNLINK=1 -DHAVE_USLEEP=1 -DHAVE_VFPRINTF=1 -DHAVE_VSPRINTF=1 -DHAVE_VSNPRINTF=1 -DHAVE_WAITPID=1 -DHAVE_LIBDL=1 -DHAVE_DLOPEN=1 -DHAVE_DLSYM=1 -DHAVE_DLERROR=1 -DHAVE_DLCLOSE=1 -DWITH_DL=1 -DWITH_DYNAMIC_LINKING=1 -DHAVE_TIMEVAL=1 -DHAVE_FINITE=1 -DHAVE_ISNAN=1 -DHAVE_ACOSH=1 -DHAVE_ASINH=1 -DHAVE_ATANH=1 -DHAVE_ERF=1 -DHAVE_ERFC=1 -DHAVE_ST_BLKSIZE=1 -DHAVE_ST_BLOCKS=1 -DHAVE_ST_RDEV=1 -DHAVE_TZNAME=1 -DHAVE_GR_PASSWD=1 -DEXCEPTION_IN_MATH=1 -DRETSIGTYPE=void -DHAVE_SYS_SIGLIST=1 -DHAVE_POSIX_SIGNALS=1 -DHAVE_GETRUSAGE=1 -DHAVE_TIMES=1 -DGNUPLOT_HAS_MULTIPLOT=1 -DGNUPLOT_HAS_FRAMES=1 User-preferences (please do not edit this section): -------------------------------------------------- EDITOR = "emacs" EXEC_PATH = ":/hosts/boondaq/usr3/ben/latest/bin:/usr/bin:/usr/local/bin:/usr/local/teTeX/bin:/cern/new/bin:/usr/sbin:/usr/bsd:/bin:/usr/java/bin:/hosts/nua/nt13/java/bin:/hosts/nua/nt12/bsapp/bin:/etc:/usr/etc:/usr/bin/X11:/usr/freeware/bin:/usr/local/netpbm:." IMAGEPATH = ".:/hosts/boondaq/usr3/ben/octave-2.1.33//share/octave/2.1.33/imagelib//" INFO_FILE = "/hosts/boondaq/usr3/ben/octave-2.1.33//info/octave.info" INFO_PROGRAM = "info" LOADPATH = ":~/octave/IRIX64:~/octave/scripts:" PAGER = "/usr/local/bin/less -m -e -s -f " PS1 = "\\s:\\#> " PS2 = "> " PS4 = "+ " automatic_replot = 0 beep_on_error = 0 completion_append_char = " " default_eval_print_flag = 1 # default_global_variable_value = default_return_value = [] default_save_format = "ascii" define_all_return_values = 0 do_fortran_indexing = 0 echo_executing_commands = 0 empty_list_elements_ok = 1 fixed_point_format = 0 gnuplot_binary = "gnuplot" gnuplot_command_end = "\n" gnuplot_command_plot = "pl" gnuplot_command_replot = "rep" gnuplot_command_splot = "sp" gnuplot_command_title = "t" gnuplot_command_using = "u" gnuplot_command_with = "w" gnuplot_has_frames = 1 gnuplot_has_multiplot = 1 history_file = "/hosts/nua/nt12/bsapp/.octave_hist" history_size = 1024 ignore_function_time_stamp = "system" implicit_num_to_str_ok = 0 implicit_str_to_num_ok = 0 initialize_global_variables = 0 max_recursion_depth = 256 ok_to_lose_imaginary_part = "warn" output_max_field_width = 10 output_precision = 5 page_output_immediately = 0 page_screen_output = 1 prefer_column_vectors = 1 print_answer_id_name = 1 print_empty_dimensions = 0 print_rhs_assign_val = 0 propagate_empty_matrices = 1 resize_on_range_error = 1 return_last_computed_value = 0 save_precision = 15 saving_history = 1 silent_functions = 0 split_long_rows = 1 string_fill_char = " " struct_levels_to_print = 2 suppress_verbose_help_message = 0 treat_neg_dim_as_zero = 0 warn_assign_as_truth_value = 1 warn_divide_by_zero = 1 warn_function_name_clash = 1 warn_future_time_stamp = 1 warn_missing_semicolon = 0 warn_variable_switch_label = 0 whitespace_in_literal_matrix = "traditional" -- Ben Sapp Los Alamos National Laboratory email: Phone: (505)667-3277 Fax: (505)665-7920 URL: http://www.neutrino.lanl.gov/ -- --------------E447761D889F9329D6E8F561 Content-Type: text/plain; charset=us-ascii; name="list-patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="list-patch" Index: src/ov-list.cc =================================================================== RCS file: /cvs/octave/src/ov-list.cc,v retrieving revision 1.19 diff -u -r1.19 ov-list.cc --- src/ov-list.cc 2000/02/02 12:36:28 1.19 +++ src/ov-list.cc 2001/04/04 16:25:58 at @ -156,10 +156,11 @@ DEFUN (nth, args, , "-*- texinfo -*-\n\ at deftypefn {Built-in Function} {} nth (@var{list}, @var{n})\n\ -Return the at var{n}-th element of @var{list}.\n\ +Return the at var{n}-th element of @var{list}. If n is a vector\n\ +then a new list with the nth elements of the old list is returned\n\ at end deftypefn") { - octave_value retval; + octave_value_list retval; if (args.length () == 2) { at @ -167,17 +168,20 @@ if (! error_state) { - int n = args(1).int_value (true); + Array vec = args(1).vector_value (); if (! error_state) { - if (n > 0 && n <= lst.length ()) - retval = lst(n-1); - else - error ("nth: index = %d out of range", n); + for (int i = 0; i < vec.length (); i++) + { + if ( vec(i) > 0 && vec(i) <= lst.length ()) + retval(i) = lst (int(vec(i)) - 1); + else + error ("nth: index = %d out of range",int(vec(i))); + } } else - error ("nth: second argument must be an integer"); + error ("nth: second argument must be an integer or vector of integers"); } else error ("nth: first argument must be a list"); --------------E447761D889F9329D6E8F561-- ------------------------------------------------------------- Octave is freely available under the terms of the GNU GPL. Octave's home on the web: http://www.octave.org How to fund new projects: http://www.octave.org/funding.html Subscription information: http://www.octave.org/archive.html -------------------------------------------------------------