我目前正在与OCaml合作开展一个小项目; 一个简单的数学表达式简化器.我应该在表达式中找到某些模式,并简化它们,以便表达式中的括号数减少.到目前为止,我已经能够实现大多数规则,除了两个,为此我决定创建一个递归的,模式匹配的"过滤器"函数.我需要实现的两个规则是:
- 将形式a - (b + c)或类似形式的所有表达式转换为a - b - c
- 将形式a /(b*c)或类似的所有表达式转换为a/b/c
...我怀疑它会相当简单,一旦我设法实现了一个,我就可以轻松实现另一个.但是,我遇到了递归模式匹配函数的问题.我的类型表达式是这样的:
type expr =
| Var of string (* variable *)
| Sum of expr * expr (* sum *)
| Diff of expr * expr (* difference *)
| Prod of expr * expr (* product *)
| Quot of expr * expr (* quotient *)
;;
Run Code Online (Sandbox Code Playgroud)
我主要遇到麻烦的是在比赛表达中.例如,我正在尝试这样的事情:
let rec filter exp =
match exp with
| Var v -> Var v
| Sum(e1, …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试最小化简单应用程序的音频延迟:
我在PC上有一个视频,我正在通过RTP将视频的音频传输到移动客户端.使用非常相似的缓冲算法,我可以在iOS上实现90ms的延迟,但在Android上可以实现±180ms的可怕延迟.
然而,在阅读了一下后,我发现了这篇文章,其中指出:
自Android 4.1/4.2以来,在某些设备中可以使用低延迟音频.
使用libpd可以实现低延迟音频,libpd是Android的纯数据库.
我有两个问题,与这两个陈述直接相关:
我在哪里可以找到有关Jellybean中新的低延迟音频的更多信息?这是我能找到的全部,但它缺乏具体的信息.如果这些更改对我来说是透明的,或者是否有一些新的类/ API调用我应该实现我注意到我的应用程序中的任何更改?我正在使用AudioTrack API,我甚至不确定它是否应该从这种改进中获益,或者我是否应该研究其他一些音频播放机制.
我应该考虑使用libpd吗?在我看来,这是我实现更低延迟的唯一机会,但由于我一直认为PD是一个音频合成实用程序,它是否真的适合于只从网络流中抓取帧并播放它们的项目?我不是在做任何合成.我跟踪错误的踪迹吗?
另外需要注意的是,在有人提到OpenSL ES之前,本文非常清楚地表明使用它时不应期望延迟有所改善:
"由于OpenSL ES是本机C API,调用OpenSL ES的非Dalvik应用程序线程没有与Dalvik相关的开销,例如垃圾收集暂停.但是,除此之外,使用OpenSL ES没有额外的性能优势.特别是,使用OpenSL ES不会导致比平台通常提供的更低的音频延迟,更高的调度优先级等."
这困扰了我一段时间.我知道,如果N键以二叉搜索树的形式排列,可以创建的树的可能数量对应于加泰罗尼亚序列中的第N个数字.
我一直试图确定这是为什么; 无法找到任何甚至可能试图直观地解释它的东西我诉诸于SO的集体知识.我找到了计算可能树木数量的其他方法,但它们似乎不太直观,除了如何使用它之外没有提供任何解释.加上维基页面(上面的链接)甚至可以显示带有3个键的可能树形图的图像,这将使我认为有一个很好的和整洁的解释可以被听到(不用说,不包括在文章中) ).
提前致谢!
我目前正在开发一个关于Prolog的非常短的项目,并且试图将我创建的"过滤器"应用到列表中.我有你可以称之为过滤器的东西,但我无法应用它.如果我说明一下会更好:
filter(A, B)
Run Code Online (Sandbox Code Playgroud)
...如果满足某些条件,则输出'true'.
filterList(A, [X, Y, Z])
Run Code Online (Sandbox Code Playgroud)
...输出一个列表,其中包含第二个参数中使过滤器输出为false的所有元素.(因此,如果过滤器(A,X)为真,则输出为[Y,Z]).
我已准备好"过滤器"功能,但现在我需要将它应用于第二个示例中所示的列表,排除在应用第一个参数时过滤器返回true的所有元素.
因此,如果过滤器是简单的A == B,则该函数应该接收A [A,B,A,C,D,A]并输出[B,C,D],删除了所有元素显然,过滤器适用.
我在功能的基本结构方面遇到了麻烦,所以如果有人能为这样的功能提供一个基本的轮廓,那将会有很大的帮助.我尽可能地简化了我的情况,所以我可以拿出你能提供的任何东西,并根据我的需要进行修改.
提前致谢!
我目前正在与Haskell合作,并发现自己遇到了一些麻烦.我应该在"dictionary.txt"文件中读取并插入列表中的每一行,但我似乎无法这样做.我有这个代码:
main = do
let list = []
loadNums "dictionary.txt" list
loadNums location list = do
inh <- openFile location ReadMode
mainloop inh list
hClose inh
mainloop inh list = do
ineof <- hIsEOF inh
if ineof
then return ()
else do
inpStr <- hGetLine inh
inpStr:list
mainloop inh list
Run Code Online (Sandbox Code Playgroud)
它应该得到每一行(我知道它确实得到每一行,因为用"putStrLn inpStr"替换"inpStr:list"正常工作,显示所有行),并将其插入列表但我得到以下错误:
Couldn't match expected type `IO' against inferred type `[]'
Run Code Online (Sandbox Code Playgroud)
可能是因为hGetLine不是一个字符串,而是一个IO字符串,我不知道如何处理以获得一个正确的字符串,我可以在我的列表中插入.我不知道如何解决这个问题,或者问题究竟是什么,但如果有人知道如何正确地将文件中的每一行都放入列表中,我会很感激.
提前致谢!
当我将SVN服务器中的目录复制到同一服务器中的另一个目录时,是否有一些选项可用于创建目录以防它不存在?例如:
svn copy file:///home/svn/folder/app/trunk file:///home/svn/folder/app/branches/release
...什么时候没有/ branches /文件夹?我知道如果我只想创建一个单级目录(如果命令停在"/ branches",它可以工作,但是我想将其进一步复制到"release"),我可以这样做.但是,如果我尝试该命令,它会抱怨缺少/ branches /文件夹来创建/ release文件夹.
任何明显或有创意的解决方案?我只是喜欢创建我指定的路径结构的东西,如果它发现它不存在.
我正在开发一个我想要启用透明状态栏的应用程序.我想要一个ImageView(我的scaleType属性需要)覆盖整个屏幕,以便图像显示在状态栏下方.这是我的布局:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:fitsSystemWindows="true"
android:scaleType="centerCrop"
android:src="@drawable/picture" />
<android.support.v7.widget.Toolbar
(...toolbar stuff...)
/>
(...some other stuff...)
</RelativeLayout>
<include layout="@layout/drawer" />
</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)
如你所见,这是一个常规的DrawerLayout.请注意DrawerLayout,the RelativeLayout和the ImageViewall都将fitsSystemWindows属性设置为true.
我的问题是:如果我设置背景资源(如颜色或图片)来完成的DrawerLayout或RelativeLayout在上面的代码中,我可以看到"下面"的状态栏的颜色或图片,正是我所想要的,但ImageView's'src'drawable总是显示在它下面,好像它fitsSystemWindows完全忽略了属性一样.
我的主题中有以下属性:
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@color/primary_dark</item>
Run Code Online (Sandbox Code Playgroud)
随着primary_dark是一个半透明的黑色(这不应该怎样都无所谓,因为正如我所说,这似乎是专属我的一个问题ImageView.透明状态栏的作品完美无论是DrawerLayout或RelativeLayout.
所以我试图在我的本机代码上使用libopus来安装Android应用程序.我的Android.mk文件如下所示:
PLATFORM_PREFIX := /opt/android-ext/
LOCAL_PATH := $(PLATFORM_PREFIX)/lib
include $(CLEAR_VARS)
LOCAL_MODULE := libopus
LOCAL_SRC_FILES := libopus.a
include $(PREBUILT_STATIC_LIBRARY)
# I have to redeclare LOCAL_PATH because the library is in /opt/android-ext/
# and my project is somewhere else. Not very elegant.
LOCAL_PATH := /home/sergio/workspace/Project/jni
include $(CLEAR_VARS)
LOCAL_MODULE := opusUtilsNative
LOCAL_SRC_FILES := opusUtilsNative.c
LOCAL_C_INCLUDES += $(PLATFORM_PREFIX)/include
LOCAL_STATIC_LIBRARIES := android_native_app_glue libopus
include $(BUILD_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)
我在opusUtilsNative.c中的代码如下所示:
#include "opusUtilsNative.h"
#include <opus/opus.h>
#include <opus/opus_types.h>
JNIEXPORT jbyteArray JNICALL Java_Project_OpusUtils_encode
(JNIEnv * je, jclass jc, jbyteArray data){
int rc;
opus_int16 …Run Code Online (Sandbox Code Playgroud) 我从包含编码PCM缓冲区的套接字收到一系列UDP数据包.解码后,我留下了一个int16*音频缓冲区,我想立即播放.
预期的逻辑是这样的:
init(){
initTrack(track, output, channels, sample_rate, ...);
}
onReceiveBufferFromSocket(NSData data){
//Decode the buffer
int16 * buf = handle_data(data);
//Play data
write_to_track(track, buf, length_of_buf, etc);
}
Run Code Online (Sandbox Code Playgroud)
我不确定与播放缓冲区有关的所有事情.在Android上,我可以通过创建一个AudioTrack对象来实现这一点,通过指定采样率,格式,通道等来设置它...然后只需用缓冲区调用"write"方法(就像我希望的那样)我可以在上面的伪代码中)但在iOS上我很快就会出现.
我尝试使用音频文件流服务,但我猜我做错了,因为没有声音出现,我觉得这些功能本身并没有实际播放.我还试图理解音频队列服务(我认为它可能接近我想要的),但是我无法找到任何简单的代码示例来使用它.
任何帮助将不胜感激,特别是以示例代码的形式.
我基本上寻找的是iOS相当于Android的Google Analytics Exception Reporter/Exception Parser.
在Android上,这些使我能够检测未捕获的异常,并在Analytics的Web UI的崩溃和异常部分中为每次崩溃接收整个堆栈跟踪/崩溃日志.
然而,在iOS上这些似乎并不可用,而且我似乎仍然坚持在他们的位置出现的严重不完整的堆栈跟踪.
我是否坚持使用Google Analytics上的不完整描述?我知道还有其他选项,例如Flightpath确实提供了这些日志,所以我唯一的选择就是使用其中一个,或者Google Analytics iOS SDK是否有一些我尚未找到的功能可以让我获得完整的访问权限日志?