小编Pil*_*lsy的帖子

一个lisp函数细化

我已经完成了Graham Common Lisp第5章练习5,它需要一个带有对象X和向量V的函数,并返回紧接在V中的X之前的所有对象的列表.

它的作用如下:

> (preceders #\a "abracadabra")
(#\c #\d #r)
Run Code Online (Sandbox Code Playgroud)

我做了递归版:

(defun preceders  (obj vec &optional (result nil) &key (startt 0))
  (let ((l (length vec)))
    (cond ((null (position obj vec :start startt :end l)) result) 
          ((= (position obj vec :start startt :end l) 0)
           (preceders obj vec result 
                      :startt (1+ (position obj vec :start startt :end l))))  
          ((> (position obj vec :start startt :end l) 0)
           (cons (elt vec (1- (position obj vec :start startt :end l))) 
                 (preceders obj …
Run Code Online (Sandbox Code Playgroud)

lisp common-lisp

5
推荐指数
2
解决办法
842
查看次数

如何从他们的数字打印原始UTF-8字符?

假设我想ÿ从它的Unicode/UTF-8数字U+00FF或十六进制中打印一个(拉丁小y带分音符)c3 bf.我怎么能用PHP做到这一点?

原因是我需要能够创建某些UTF-8字符用于在我的正则表达式和字符串函数中进行测试.但是,由于键盘上的键数少于200个,所以我无法键入它们 - 而且由于我多次被困在一个仅限ASCII的世界中 - 我需要能够创建它们的基本单独的ASCII安全,UTF- 8个字符代码.

注意:为了在浏览器中正确显示,我知道第一步是

header('Content-Type: text/html; charset=utf-8');
Run Code Online (Sandbox Code Playgroud)

php unicode utf-8

5
推荐指数
1
解决办法
1万
查看次数

在lisp中解析字符串中的数字

这是一个简短的问题:
输入:一个字符串列表,每个字符串包含数字
("3.4 5.4 1.2 6.4""7.8 5.6 4.3""1.2 3.2 5.4")

输出:一个数字列表
(3.4 5.4 1.2 6.4 7.8 5.6 4.3 1.2 3.2 5.4)

这是我尝试编码:

(defun parse-string-to-float (line &optional (start 0))
  "Parses a list of floats out of a given string"
  (if (equalp "" line)
    nil
    (let ((num (multiple-value-list (read-from-string (subseq line start)))))
      (if (null (first num))
        nil
        (cons (first num) (parse-string-to-float (subseq line (+ start (second num)))))))))

(defvar *data* (list "  3.4 5.4 1.2 6.4" "7.8 5.6 4.3" "1.2 3.2 5.4"))

(setf …
Run Code Online (Sandbox Code Playgroud)

lisp parsing text common-lisp

4
推荐指数
2
解决办法
4415
查看次数

在Mathematica中查找以前定义的消息

默认情况下,Mathematica定义了许多用于发送常见错误的有用消息,例如使用错误数量的参数或未找到的文件调用的函数.在一般情况下,我更喜欢尽可能使用现有的,定义的消息,因为这会让他们更容易通过类似的机制来处理Check,QuietOn/ Off.但是,我所有尝试查找当前定义的消息的尝试都失败了; 明显的方法,如

DownValues[MessageName] 
Run Code Online (Sandbox Code Playgroud)

根本不工作.

有缺点我不知道吗?

提前致谢.

wolfram-mathematica

4
推荐指数
1
解决办法
187
查看次数

宏在功能中不起作用

我有以下代码的问题:http://lisper.ru/apps/format/96

问题在于"规范化"功能,这是行不通的.
它在第五行失败:(zero-p a indexes i)

(defun normalize (a &optional indexes i)
  "Returns normalized A."
  (progn
   (format t "Data=~A ~A ~A" a indexes i)
   (if (zero-p a indexes i)
      a ;; cannot normalize empty vector
    (let* ((mmm (format t "Zero?=~a" (zero-p a indexes i)))
             (L (sqrt (+ (do-op-on * a :x a :x indexes i indexes i)
                         (do-op-on * a :y a :y indexes i indexes i)
                         (do-op-on * a :z a :z indexes i indexes …
Run Code Online (Sandbox Code Playgroud)

lisp macros common-lisp

4
推荐指数
1
解决办法
208
查看次数

将指针指向容器中的元素

说我有一个对象:

struct Foo 
{
    int bar_;
    Foo(int bar) bar_(bar) {}
};
Run Code Online (Sandbox Code Playgroud)

我有一个包含Foos 的STL容器,也许是一个矢量,我拿了

// Elsewhere...

vector<Foo> vec;

vec.push_back(Foo(4));

int *p = &(vec[0].bar_)
Run Code Online (Sandbox Code Playgroud)

这是一个可怕的想法,对吧?

原因是vector将其元素存储在某个动态分配的数组中,最终,如果添加足够的元素,则必须分配另一个数组,复制原始数组的所有元素,并删除旧数组.在那之后,p指向垃圾.这就是为什么a上的许多操作vector都会使迭代器无效.

似乎可以合理地假设一个使容器中的迭代器无效的操作也会使指向容器元素的数据成员的指针无效,并且如果一个操作不会使迭代器失效,那些指针仍然是安全的.但是,许多合理的假设都是错误的.这是其中之一吗?

c++ pointers stl

4
推荐指数
1
解决办法
1081
查看次数

修改单个玩家的消息

我正在写一个Minecraft插件,当你在聊天中提到他的名字时会通知某人.他将收到一条定制的消息,在消息中,他的名字加下划线并重新收录.它还会播放音乐笔记.

我有这个,但它会将消息发送给服务器中的每个人:

@Override
public void onEnable()
{
    Bukkit.getServer().getPluginManager().registerEvents(this, this);
}

@Override
public void onDisable()
{

}


 @EventHandler
 public void onChat(AsyncPlayerChatEvent e)
 {
     for(Player on:Bukkit.getServer().getOnlinePlayers())
     {
         if(on.equals(e.getPlayer()))continue;


         if(e.getMessage().contains(on.getName()))
         {
             e.setMessage(e.getMessage().replaceAll(on.getName(), ChatColor.GREEN + "@" + ChatColor.UNDERLINE + on.getName()));
             on.playNote(on.getLocation(), Instrument.PIANO, Note.natural(1, Tone.A));
         }
     }
 }
Run Code Online (Sandbox Code Playgroud)

java minecraft bukkit

4
推荐指数
1
解决办法
2899
查看次数

Haskell:解析'where'和后卫的错误

所以,我刚刚开始自学Haskell出自Real World Haskell一书,在做其中一个练习的过程中,我编写了以下代码:

step acc ch | isDigit ch = if res < acc   
                              then error "asInt_fold: \
                                         \result overflowed"
                              else res
                      where res = 10 * acc + (digitToInt ch)
            | otherwise  = error ("asInt_fold: \
                                  \not a digit " ++ (show ch))
Run Code Online (Sandbox Code Playgroud)

当我将它加载到GHCi 6.6中时,我收到以下错误:

IntParse.hs:12:12: parse error on input `|'
Failed, modules loaded: none.
Run Code Online (Sandbox Code Playgroud)

我几乎可以肯定这个错误是由于"where"子句与后续的后卫的相互作用造成的; 注释掉守卫会消除它,就像用等效的"let"子句替换"where"子句一样.我也很确定我必须以某种方式破坏缩进,但我无法理清.

提前感谢任何提示.

haskell syntax-error

3
推荐指数
2
解决办法
3223
查看次数

c ++从<<重载获取流修饰符

我像这样重载了流插入运算符:

template<class Ch, class Tr, class word_type>
std::basic_ostream<Ch, Tr>&
operator << (std::basic_ostream<Ch, Tr>& s, const Mabit::mabit<word_type>& obj)
{
  s << obj.to_string(Mabit::DEC, ',');
  return s;
}
Run Code Online (Sandbox Code Playgroud)

(mabit是我希望重载工作的类)

也就是说,因为我可以在给不同的参数to_string的方法,我想能够使用标准的流修改一样std::dec,std::hex......在某种程度上,我可以取回他们重载运营商准备好参数作为参数to_string

如果我也可以使用该语言环境(为数千个提取分隔符),那么第二个参数也会有所帮助......

那可能吗 ?

c++ overloading stream

3
推荐指数
1
解决办法
146
查看次数

简单类型球拍程序不进行类型检查

我是Typed Racket的入门级初学者,并且在玩Tree初学者指南》中定义的非常简单的类型:

#lang typed/racket
(define-type Tree (U leaf node))
(struct: leaf ([val : Number]))
(struct: node ([left : Tree] [right : Tree]))
Run Code Online (Sandbox Code Playgroud)

作为练习,我决定编写一个高阶函数来使树下降:

(: tree-descend : All (A) (Number -> A) (A A -> A) Tree -> A)
(define (tree-descend do-leaf do-node tree)
  (if (leaf? tree)
      (do-leaf (leaf-val tree))
      (do-node (tree-descend do-leaf do-node (node-left tree))
               (tree-descend do-leaf do-node (node-right tree)))))
Run Code Online (Sandbox Code Playgroud)

此类型检查正常。但是,当我尝试使用它来重新定义tree-sum所有叶子求和函数时,我收到一条令人惊讶且冗长的错误消息:

(: tree-sum : Tree -> Number)
(define (tree-sum t)
  (tree-descend identity + t)) …
Run Code Online (Sandbox Code Playgroud)

scheme typechecking racket typed-racket

3
推荐指数
1
解决办法
207
查看次数

Shell脚本 - Linux

我想编写一个非常简单的脚本,它接受一个进程名称,并返回包含进程名称的最后一个文件名的尾部.

我写了类似的东西:

#!/bin/sh
tail $(ls -t *"$1"*| head -1) -f
Run Code Online (Sandbox Code Playgroud)

我的问题:

  1. 我需要第一行吗?

  2. 为什么不ls -t *"$1"*| head -1 | tail -f工作?

  3. 有没有更好的方法呢?

linux shell scripting

2
推荐指数
1
解决办法
386
查看次数

比较集合的函数; 有助于提高效率

我正在尝试编写一个比较两个列表的函数,看它们是否代表相同的集合.这是'(a b c d d)'(d c b a d)代表同一组.元素可以是任何顺序.

这就是我所拥有的,它有效:

(defun samesetp (list1 list2)
  (cond
    ((null list1) (null list2))
    ((eq list2 (remove (car list1) list2 :count 1)) nil)
    (t (samesetP (cdr list1) (remove (car list1) list2 :count 1))))))
Run Code Online (Sandbox Code Playgroud)

我不喜欢这个的原因(remove (car list1) list2 :count 1))是计算两次 - 一次测试remove操作是否真正删除了任何东西,一次递归测试列表的其余部分没有.

任何人都可以提出一种方法来改善这一点,而不使用不同的算法

lisp common-lisp

1
推荐指数
1
解决办法
368
查看次数

Java泛型<?>以及如何在Scala中处理它?

我有一个API(来自第三方java库),看起来像:

    public List<?> getByXPath(String xpathExpr)
Run Code Online (Sandbox Code Playgroud)

在名为DomNode的类上定义

我在scala函数中尝试这个:

1: def removeChild(node: DomNode, xpath: String) {
2:               val lst: List[?] =  node.getByXPath(xpath)
3:      val child: DomNode = lst(0)
4:                child.getParentNode().removeChild(child)
    }
Run Code Online (Sandbox Code Playgroud)

但它不会在scala中编译.我在第2行得到错误.

根据答案,我修改了它,现在它是:

1: def removeChild(node: DomNode, xpath: String) {
2:            val lst = node.getByXPath(xpath)
3:            val child = lst(0).asInstanceOf[DomNode]            
4:            child.getParentNode().removeChild(child)
    }
Run Code Online (Sandbox Code Playgroud)

现在我在第3行得到错误:java.util.List类型的lst [?0]不接受参数

我也尝试了val lst: List[_] = node.getByXPath(xpath) 但是这给了我同样的错误:

type mismatch;
 found : java.util.List[?0] where type ?0
 required: scala.List[_]
Run Code Online (Sandbox Code Playgroud)

所以我仍然被困住了.

scala

0
推荐指数
1
解决办法
1323
查看次数