• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Custom IC SKILL
  3. SKILL append() only takes two arguments

Stats

  • Locked Locked
  • Replies 2
  • Subscribers 143
  • Views 15566
  • Members are here 0
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

SKILL append() only takes two arguments

tweeks
tweeks over 11 years ago

Why?  (I noticed because it complicated the definition of "mappend" in an earlier post.)

Common Lisp APPEND takes 0 or more (&rest).

Emacs Lisp append takes 0 or more (&rest).

Franz Lisp?  Two.

Those early 80's Franz people were rather minimalistic in the design of their Lisp.  Oh well, it's easily fixed:

(defun append\* (@rest lists "l")
  (foldr1 append lists))  ;; or should I use tconc??  

Next comes the obligatory CCR for appendStar, or appendseq, or whatever silly name Cadence R&D will come up with this time to avoid appending an asterisk. I'm thinking of "constar" for cons*, and "letSeq" for let* (though I notice there is also an undocumented "letStar", suggesting they couldn't make up their minds on that one).

  • Cancel
  • Andrew Beckett
    Andrew Beckett over 11 years ago

    Or it could be possible for append to be extended to take a variable number of arguments. That would be compatible with the original - don't see that it's really necessary to define a whole new function.

    As for naming of functions, in general care is taken over the names (there are of course exceptions!).  The name letseq is (I think) clearer than let* because it gives more clarity to what it actually does that is different. The fact that it doesn't correspond to other dialects is another matter - it's a different dialect so it doesn't have to correspond. letStar is undocumented for the simple reason that it was actually written many years ago by a lisper in the ADE team, and is not actually part of core SKILL - it doesn't exist in the skill executable and will not work in pcells, etc. There are undocumented core SKILL functions called let\* and cons\* but these have ugly backslashes in because of SKILL's ability to use infix syntax.
     
    Regards,
     
    Andrew.
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • tweeks
    tweeks over 10 years ago
    Andrew Beckett said:

    Or it could be possible for append to be extended to take a variable number of arguments. That would be compatible with the original - don't see that it's really necessary to define a whole new function.

    On a related note, it's interesting that I've yet to see a Lisp with an n-ary cons: in every dialect I've checked, cons always takes just the two arguments.  Even in SKILL, they added an n-ary version with a different name rather than enhancing the original.  Was it out of respect for tradition, or some sort of implementation restriction on primitive operators? 
     
    Andrew Beckett said:
    As for naming of functions, in general care is taken over the names (there are of course exceptions!).  The name letseq is (I think) clearer than let* because it gives more clarity to what it actually does that is different.
    I agree! 
    Some radical Lisp reformers on the internet have suggested that let should always use letseq semantics, because the efficiency difference is negligible on today's hardware.
    Andrew Beckett said:

    letStar is undocumented for the simple reason that it was actually written many years ago by a lisper in the ADE team, and is not actually part of core SKILL - it doesn't exist in the skill executable and will not work in pcells, etc

    Interesting...
     
    Andrew Beckett said:

    There are undocumented core SKILL functions called let\* and cons\* but these have ugly backslashes in because of SKILL's ability to use infix syntax.

    Will we live to see a day when programming languages switch to using a proper multiplication symbol (like × or ∙) rather than an asterisk? :P

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel

Community Guidelines

The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information