在Lisp中获取多括号列表的第一个元素

时间:2017-10-12 02:42:58

标签: list lisp common-lisp

如果我有如下列表:

(((X)))

我想得到X并且没有得到括号

在LISP中,如果我CAR,我仍会得到括号。

有什么功能可以帮我吗?

2 个答案:

答案 0 :(得分:5)

在Common Lisp中,( some-value )是一个包含单个元素的列表,由some-value给出。

列表的经典图形表示显示,实际上单个值列表是指向some-valuenil的指针的“缺点”(对):

因此,获取car some-value会产生cdr,而nil会产生((x))

那么,这个s-expression的含义是什么:some-value?如果您使用(x)替换第一个示例中的x,则可以获得此结果。也就是说,这不是一个“多括号列表”,而只是一个包含单个元素的列表,它本身就是一个包含单个元素的列表(换句话说,就是汽车是单元素列表的列表)。这可以用图形显示,如下图所示:

因此,这次得到car你必须使用(car (car list))两次,写(caar list))(实际上这可以在Common-Lisp中用(((x)))缩写(参见reference)。

我留给您完成练习,绘制与x对应的图表,并找到如何从此列表中提取(function( $ ) { 'use strict'; $(function() { var trigger = $("#billing_continue"); console.log(trigger); $(trigger).on("click", function() { shippingScript() } ); function shippingScript() { console.log("ShippingScript"); var select = $("#shipping_country")[0]; var shipping = $("#shipping_option_select select")[0]; //international shipping option var world = $(shipping).children("option[value='woocommerce_flatrate_percountry']")[0]; // domestic shipping options var shipOpts = $(shipping).children("option:not([value='woocommerce_flatrate_percountry'])"); shipOpts = $.makeArray(shipOpts); function showDomestics() { console.log("showDomestics"); $(shipOpts).show(); } function hideDomestics() { console.log("hideDomestics"); var _select = $("#shipping_country")[0]; $(shipOpts).hide(); var selected = $(_select).children("option:selected")[0]; if ( $.inArray(selected, shipOpts) ) { $(selected).removeAttr("selected"); $(world).attr("selected", "selected"); } else { console.log("not in array"); } } $(select).on("change", function() { console.log("changing to a different country") var selected = $(this).children("option:selected"); $(selected).val() === 'US' ? showDomestics() : hideDomestics(); }); } }); })( jQuery );

答案 1 :(得分:0)

像这样的东西,例如:

(defun first-atom (c)
  (if (consp c)
    (first-atom (first c))
    c)))

这有点错误,因为(first-atom 1)不是错误,它可能应该是:它需要外部检查cons,它调用递归本地fn来完成工作。有点你明白了。

对于可能出现压痕的缩进感到抱歉:很难在电话上使用。