我在使用常见的lisp计算两个位向量之间的距离时遇到问题.
我是lisp的新手,这是我的人工智能家庭作业的最终作业问题,并且相信我遇到的问题是语法问题.
这是一个问题:
在由1和0的列表表示的相同长度的两个位向量之间写入递归函数DISTANCE.例如,
(距离'(1 0 1 1)'(0 1 0 1))
答案 - 3
如果向量长度不同,讨论必须做什么.
根据我的理解,两个位向量之间的距离只是对两个向量进行异或,然后向上计数1.
使用这个例子,我们将得到1011 ^ 0101 = 1110,它等于3.
假设这是计算距离的正确方法,那么我的问题是除了使这个递归之外还找到一种在lisp中进行异或的方法.
我如何获取两个列表并将它们放入我可以使用logxor (如此处所示)之类的格式中,然后在结果列表中计算1?
虽然尝试这样做(logxor '(1 0 1 1) '(0 1 0 1))告诉我'(1 0 1 1)不是一个整数所以它似乎logxor不适用于让我不知所措的列表.
您可以提供的任何帮助将不胜感激
谢谢!
我需要一个MySQL函数,它允许我通过一些工作日(星期一到星期五)和开始DATE或DATETIME(对我的实现无关紧要),并让它返回一个新的DATE或DATETIME,许多工作日在将来.
示例:SELECT AddWorkDays(10, "2013-09-01")返回"2013-09-16",假设"2013-09-01"是星期一.
同样:SELECT AddWorkDays(-10, "2013-09-16")返回"2013-09-01"
我发现这个函数用于MSSQL数据库(我认为)正是我需要的,除了它不在MySQL中.我尝试手动将其转换为MySQL语法并实现了这一点:
DROP FUNCTION IF EXISTS AddWorkDays;
DELIMITER $$
CREATE FUNCTION AddWorkDays
(
WorkingDays INT,
StartDate DATE
)
RETURNS DATE
BEGIN
DECLARE Count INT;
DECLARE i INT;
DECLARE NewDate DATE;
SET Count = 0;
SET i = 0;
WHILE (i < WorkingDays) DO
BEGIN
SET Count = Count + 1;
SET i = i + 1;
WHILE DAYOFWEEK(ADDDATE(StartDate, Count)) IN (1,7) DO
BEGIN
SET Count = Count + …Run Code Online (Sandbox Code Playgroud)