• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Life is Good.

            Enhance Tech and English
            隨筆 - 65, 文章 - 20, 評論 - 21, 引用 - 0
            數據加載中……

            How to use (nth …) Safely

            Danger of the (nth …) Function

             

            If not used carefully, this function can easily generate “bad argument” errors in our product. The purpose of this function is to return the “nth” index entry of a list. The syntax is (nth ix lst) where “ix” the index (zero-based) and “lst” is a non-nil list.

             

            So, if the “lst” is a four-element list such as (“apple” 3.14 (“banana” “grape”) “CR101”) then the nth function will return the following:

             

            (nth 0 lst) returns “apple”

            (nth 1 lst) returns 3.14

            (nth 2 lst) returns (“banana” “grape”)  - i.e. a sublist in the list

            (nth 3 lst) returns “CR101”

            (nth 4 lst) returns nil

            (nth 5 lst) returns nil

             

            BUT, if “lst” does not exist (i.e. “lst” is nil), then any of the above calls will trigger our product to fail with a “bad argument” message in the command window. You can simulate this by trying it at your command line. Type this (setq xx nil) [Enter] and then this (nth 0 xx) [Enter].

             Under some conditions, the “xx” list above comes through as undefined or nil. So, when the (nth …) function tries to return the 2nd element (index = 1) of this non-existent list, our product fails with a “bad argument” message.

             

            How to use (nth …) Safely

             

            Solution #1 – use (car lst), (cadr lst), (caddr lst) instead of (nth 0 lst), (nth 1 lst), (nth 2 lst) – these “ca*” functions extract the same information from the list but do not fail with a “bad argument” message if the lst does not exist. So, in the above example, (setq typeflag (cadr xx)) would return the same information as (setq typeflag (nth 1 xx)) BUT without the chance of failing if the list “xx” did not exist. So, (nth 1 xx) fails with “bad argument” but (cadr xx) returns safely with a returned value of nil.

             

            Solution #2 – add an error check prior to calling the (nth…) function. In the above example, do something like this:  (if xx (setq typeflag (nth 1 xx))). This expression will only execute the (nth…) function if “xx” is non-nil. If you really want to make sure that all is well, that xx is non-nil AND it is a “List”, you could do this:  (if (= (type xx) ‘LIST)(setq typeflag (nth 1 xx))). But, in general, the first example is probably sufficient.

            posted on 2008-07-31 14:57 Mike Song 閱讀(101) 評論(0)  編輯 收藏 引用

            浪潮AV色综合久久天堂| 97久久精品人人澡人人爽| 久久精品二区| 一本色综合久久| 国产成年无码久久久免费| 性欧美大战久久久久久久久| 久久久噜噜噜www成人网| 91精品国产91久久| 久久天天躁夜夜躁狠狠| 久久成人国产精品| 久久人人爽人人精品视频| 久久久国产打桩机| 久久精品嫩草影院| 思思久久精品在热线热| 嫩草影院久久99| 精品综合久久久久久98| 狠狠人妻久久久久久综合蜜桃| 久久婷婷五月综合国产尤物app| 国产成人久久AV免费| 久久国产AVJUST麻豆| 狠狠色丁香久久婷婷综| 久久久久久国产精品无码下载| 国产激情久久久久影院老熟女| 久久久久无码精品国产不卡| 亚洲人成无码久久电影网站| 精品人妻伦九区久久AAA片69| 久久国产精品99精品国产| 亚洲人成精品久久久久| 中文字幕久久精品 | 久久久久久精品久久久久| 91久久成人免费| 亚洲午夜久久久精品影院| 99久久免费国产特黄| 久久亚洲精品无码AV红樱桃| 99精品国产99久久久久久97| 亚洲国产精品狼友中文久久久 | 久久久精品久久久久特色影视| 精品久久久久久无码中文字幕一区 | 狠狠色丁香久久婷婷综合| 一级做a爰片久久毛片免费陪| 色综合久久中文字幕综合网|