• <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 閱讀(103) 評論(0)  編輯 收藏 引用

            久久精品无码一区二区app| 欧美精品丝袜久久久中文字幕 | 久久精品国产福利国产秒| 久久99亚洲网美利坚合众国| 精品亚洲综合久久中文字幕| 久久久精品视频免费观看| 亚洲va中文字幕无码久久不卡| 久久久久人妻一区精品色| 久久久久国产精品三级网| 久久精品国产亚洲av影院| 国产国产成人久久精品| 99精品国产99久久久久久97| 欧美伊香蕉久久综合类网站| 精品国产99久久久久久麻豆| 国产精品VIDEOSSEX久久发布| 无码人妻久久一区二区三区免费 | 亚洲综合婷婷久久| 欧洲精品久久久av无码电影| 欧美精品福利视频一区二区三区久久久精品| 国产亚洲精品久久久久秋霞| 久久国产福利免费| 亚洲国产精品综合久久一线| 9久久9久久精品| 久久久无码精品亚洲日韩蜜臀浪潮 | 99久久婷婷国产综合亚洲| 91精品国产综合久久四虎久久无码一级| 综合久久一区二区三区| 久久综合九色综合97_久久久| 蜜臀久久99精品久久久久久小说| 热综合一本伊人久久精品 | 久久99精品久久久久久9蜜桃| 97久久超碰国产精品旧版| 久久综合九色综合网站| 伊人久久大香线蕉亚洲| 国产免费久久精品99re丫y| 亚洲国产精品综合久久一线 | 久久香蕉国产线看观看精品yw| 香蕉久久久久久狠狠色| 久久毛片一区二区| 伊人精品久久久久7777| 久久亚洲精品国产亚洲老地址|